当前位置: 首页 > 编程日记 > 正文

mongoDB 入门指南、示例

http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html

mongoDB 入门指南、示例

上一篇:简单介绍mongoDB

一、准备工作

1、 下载mongoDB

下载地址:http://www.mongodb.org/downloads

选择合适你的版本

相关文档:http://www.mongodb.org/display/DOCS/Tutorial

2、 安装mongoDB

A、 不解压模式:

将下载下来的mongoDB-xxx.zip打开,找到bin目录,运行mongod.exe就可以启动服务,默认端口27017,db保存的路径是系统C硬盘目录的根目录的/data/db目录。也就是说,如果你的mongoDB-xxx.zip在E盘,那么你需要在C盘下建立data/db目录。mongoDB不会帮你建立这个目录的。

然后运行mongo即可连接到test数据库,你就可以进行数据操作。运行help显示帮助命令行。

B、 解压模式

将下载下来的mongoDB-xxx.zip解压到任意目录,找到bin目录,运行mongod.exe就可以启动mongoDB,默认端口27017,db保存的路径是当前zip所在硬盘目录的根目录的/data/db目录。也就是说,如果你的mongoDB-xxx.zip在E盘,那么你需要在E盘下建立data/db目录。mongoDB不会帮你建立这个目录的。

然后运行mongo即可连接到test数据库,你就可以进行数据操作。运行help显示帮助命令行。

3、 简单测试

> 2+4
6
> db
test
> //第一次插入数据会创建数据库
Fri May 20 16:47:39 malformed UTF-8 character sequence at offset 27
error2:(shellhelp1) exec failed: malformed UTF-8 character sequence at offset 27
> db.foo.insert({id: 2011, userName: 'hoojo', age: 24, email: "hoojo_@126.com"});
> db.foo.find();
{ "_id" : ObjectId("4dd62b0352a70cbe79e04f81"), "id" : 2011, "userName" : "hoojo",
"age" : 24, "email" : "hoojo_@126.com" }
>

上面完成了简单运算,显示当前使用的数据库,以及添加数据、查询数据操作

二、DB shell数据操作

shell命令操作语法和JavaScript很类似,其实控制台底层的查询语句都是用JavaScript脚本完成操作的。

Ø 数据库

 
1、Help查看命令提示
help
db.help();
db.yourColl.help();
db.youColl.find().help();
rs.help();
 
2、切换/创建数据库
>use yourDB;
当创建一个集合(table)的时候会自动创建当前数据库
 
3、查询所有数据库
show dbs;
 
4、删除当前使用数据库
db.dropDatabase();
 
5、从指定主机上克隆数据库
db.cloneDatabase(“127.0.0.1”);
将指定机器上的数据库的数据克隆到当前数据库
 
6、从指定的机器上复制指定数据库数据到某个数据库
db.copyDatabase("mydb", "temp", "127.0.0.1");
将本机的mydb的数据复制到temp数据库中
 
7、修复当前数据库
db.repairDatabase();
 
8、查看当前使用的数据库
db.getName();
db;
db和getName方法是一样的效果,都可以查询当前使用的数据库
 
9、显示当前db状态
db.stats();
 
10、当前db版本
db.version();
 
11、查看当前db的链接机器地址
db.getMongo();

Ø Collection聚集集合

 
1、创建一个聚集集合(table)
db.createCollection(“collName”, {size: 20, capped: 5, max: 100});
 
2、得到指定名称的聚集集合(table)
db.getCollection("account");
 
3、得到当前db的所有聚集集合
db.getCollectionNames();
 
4、显示当前db所有聚集索引的状态
db.printCollectionStats();

Ø 用户相关

1、添加一个用户
db.addUser("name");
db.addUser("userName", "pwd123", true);
添加用户、设置密码、是否只读
 
2、数据库认证、安全模式
db.auth("userName", "123123");
 
3、显示当前所有用户
show users;
 
4、删除用户
db.removeUser("userName");

Ø 其他

1、查询之前的错误信息
db.getPrevError();
 
2、清除错误记录
db.resetError();

三、Collection聚集集合操作

Ø 查看聚集集合基本信息

 
1、查看帮助
db.yourColl.help();
 
2、查询当前集合的数据条数
db.yourColl.count();
 
3、查看数据空间大小
db.userInfo.dataSize();
 
4、得到当前聚集集合所在的db
db.userInfo.getDB();
 
5、得到当前聚集的状态
db.userInfo.stats();
 
6、得到聚集集合总大小
db.userInfo.totalSize();
 
7、聚集集合储存空间大小
db.userInfo.storageSize();
 
8、Shard版本信息
db.userInfo.getShardVersion()
 
9、聚集集合重命名
db.userInfo.renameCollection("users");
将userInfo重命名为users
 
10、删除当前聚集集合
db.userInfo.drop();

Ø 聚集集合查询

1、查询所有记录
db.userInfo.find();
相当于:select * from userInfo;
默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize = 50;这样每页就显示50条记录了。
 
2、查询去掉后的当前聚集集合中的某列的重复数据
db.userInfo.distinct("name");
会过滤掉name中的相同数据
相当于:select distict name from userInfo;
 
3、查询age = 22的记录
db.userInfo.find({"age": 22});
相当于: select * from userInfo where age = 22;
 
4、查询age > 22的记录
db.userInfo.find({age: {$gt: 22}});
相当于:select * from userInfo where age > 22;
 
5、查询age < 22的记录
db.userInfo.find({age: {$lt: 22}});
相当于:select * from userInfo where age < 22;
 
6、查询age >= 25的记录
db.userInfo.find({age: {$gte: 25}});
相当于:select * from userInfo where age >= 25;
 
7、查询age <= 25的记录
db.userInfo.find({age: {$lte: 25}});
 
8、查询age >= 23 并且 age <= 26
db.userInfo.find({age: {$gte: 23, $lte: 26}});
 
9、查询name中包含 mongo的数据
db.userInfo.find({name: /mongo/});
//相当于%%
select * from userInfo where name like ‘%mongo%’;
 
10、查询name中以mongo开头的
db.userInfo.find({name: /^mongo/});
select * from userInfo where name like ‘mongo%’;
 
11、查询指定列name、age数据
db.userInfo.find({}, {name: 1, age: 1});
相当于:select name, age from userInfo;
当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。
 
12、查询指定列name、age数据, age > 25
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from userInfo where age > 25;
 
13、按照年龄排序
升序:db.userInfo.find().sort({age: 1});
降序:db.userInfo.find().sort({age: -1});
 
14、查询name = zhangsan, age = 22的数据
db.userInfo.find({name: 'zhangsan', age: 22});
相当于:select * from userInfo where name = ‘zhangsan’ and age = ‘22’;
 
15、查询前5条数据
db.userInfo.find().limit(5);
相当于:select top 5 * from userInfo;
 
16、查询10条以后的数据
db.userInfo.find().skip(10);
相当于:select * from userInfo where id not in (
select top 10 * from userInfo
);
 
17、查询在5-10之间的数据
db.userInfo.find().limit(10).skip(5);
可用于分页,limit是pageSize,skip是第几页*pageSize
 
18、or与 查询
db.userInfo.find({$or: [{age: 22}, {age: 25}]});
相当于:select * from userInfo where age = 22 or age = 25;
 
19、查询第一条数据
db.userInfo.findOne();
相当于:select top 1 * from userInfo;
db.userInfo.find().limit(1);
 
20、查询某个结果集的记录条数
db.userInfo.find({age: {$gte: 25}}).count();
相当于:select count(*) from userInfo where age >= 20;
 
21、按照某列进行排序
db.userInfo.find({sex: {$exists: true}}).count();
相当于:select count(sex) from userInfo;

Ø 索引

1、创建索引
db.userInfo.ensureIndex({name: 1});
db.userInfo.ensureIndex({name: 1, ts: -1});
 
2、查询当前聚集集合所有索引
db.userInfo.getIndexes();
 
3、查看总索引记录大小
db.userInfo.totalIndexSize();
 
4、读取当前集合的所有index信息
db.users.reIndex();
 
5、删除指定索引
db.users.dropIndex("name_1");
 
6、删除所有索引索引
db.users.dropIndexes();

Ø 修改、添加、删除集合数据

1、添加
db.users.save({name: ‘zhangsan’, age: 25, sex: true});
添加的数据的数据列,没有固定,根据添加的数据为准
 
2、修改
db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
相当于:update users set name = ‘changeName’ where age = 25;
 
db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
相当于:update users set age = age + 50 where name = ‘Lisi’;
 
db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
相当于:update users set age = age + 50, name = ‘hoho’ where name = ‘Lisi’;
 
3、删除
db.users.remove({age: 132});
 
4、查询修改删除
db.users.findAndModify({
    query: {age: {$gte: 25}}, 
    sort: {age: -1}, 
    update: {$set: {name: 'a2'}, $inc: {age: 2}},
    remove: true
});
 
db.runCommand({ findandmodify : "users", 
    query: {age: {$gte: 25}}, 
    sort: {age: -1}, 
    update: {$set: {name: 'a2'}, $inc: {age: 2}},
    remove: true
});

update 或 remove 其中一个是必须的参数; 其他参数可选。

参数

详解

默认值

query

查询过滤条件

{}

sort

如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操作

{}

remove

若为true,被选中对象将在返回前被删除

N/A

update

一个 修改器对象

N/A

new

若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。

false

fields

参见Retrieving a Subset of Fields (1.5.0+)

All fields

upsert

创建新对象若查询结果为空。 示例 (1.5.4+)

false

Ø 语句块操作

1、简单Hello World
print("Hello World!");
这种写法调用了print函数,和直接写入"Hello World!"的效果是一样的;
 
2、将一个对象转换成json
tojson(new Object());
tojson(new Object('a'));
 
3、循环添加数据
> for (var i = 0; i < 30; i++) {
... db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
... };
这样就循环添加了30条数据,同样也可以省略括号的写法
> for (var i = 0; i < 30; i++) db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
也是可以的,当你用db.users.find()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息;
 
4、find 游标查询
>var cursor = db.users.find();
> while (cursor.hasNext()) { 
    printjson(cursor.next()); 
}
这样就查询所有的users信息,同样可以这样写
var cursor = db.users.find();
while (cursor.hasNext()) { printjson(cursor.next); }
同样可以省略{}号
 
5、forEach迭代循环
db.users.find().forEach(printjson);
forEach中必须传递一个函数来处理每条迭代的数据信息
 
6、将find游标当数组处理
var cursor = db.users.find();
cursor[4];
取得下标索引为4的那条数据
既然可以当做数组处理,那么就可以获得它的长度:cursor.length();或者cursor.count();
那样我们也可以用循环显示数据
for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]);
 
7、将find游标转换成数组
> var arr = db.users.find().toArray();
> printjson(arr[2]);
用toArray方法将其转换为数组
 
8、定制我们自己的查询结果
只显示age <= 28的并且只显示age这列数据
db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson);
db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson);
排除age的列
db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson);
 
9、forEach传递函数显示信息
db.things.find({x:4}).forEach(function(x) {print(tojson(x));});
上面介绍过forEach需要传递一个函数,函数会接受一个参数,就是当前循环的对象,然后在函数体重处理传入的参数信息。

转载于:https://www.cnblogs.com/adolfmc/p/3162167.html

相关文章:

中国电子学会图形化四级编程题:成语接龙

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

sidecar学习

1、SideCar的出现 微服务的结构是细粒度的&#xff0c;由多个服务构成&#xff0c;支持不同的服务用不同的语言来编写&#xff0c;比如a服务用python&#xff0c;b服务用java&#xff0c;C服务用php等&#xff0c;我们称为异构语言&#xff0c;那么在利用zuul来代理访问服务的时…

java整数常量区_在Java中,我可以用二进制格式定义一个整数常量吗?

所以&#xff0c;随着Java SE 7的发布&#xff0c;二进制表示法是标准的。 如果你对二进制有一个很好的理解&#xff0c;语法是非常简单明了的。byte fourTimesThree 0b1100; byte data 0b0000110011; short number 0b111111111111111; int overflow 0b1010101010101010101…

[LeetCode 120] - 三角形(Triangle)

问题 给出一个三角形&#xff0c;找出从顶部至底部的最小路径和。每一步你只能移动到下一行的邻接数字。 例如&#xff0c;给出如下三角形&#xff1a; [ [2], [3,4], [6,5,7], [4,1,8,3] ] 从顶部至底部的最小路径和为11&#xff08;即235111&#xff09;。 注意&#xff1a; …

中国电子学会scratch等级考试四级编程题:找出出现次数最多的数字

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

人工智能 有信息搜索 (启发式)

一、最佳优先搜索 根据评价函数选择表现的最佳的节点进行扩展 最佳优先搜索 best-first-search 算法 不同的方法有不同的评价函数 启发函数&#xff0c;标记h(x) h(n)从节点n到目标的最低耗散估计值 启发函数是额外信息的一种最普通的形式 二、贪婪最佳优先搜索 最先扩展离目标…

java 排序算法 讲解_java实现排序算法之冒泡排序法详细讲解

冒泡排序(Bubble Sort)&#xff0c;是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序。这…

24、线程控制

线程有一套完整的与其有关的函数库可供调用&#xff0c;它们中的绝大多数函数名都以pthread_开头。为了调用这些函数库&#xff0c;必须在程序中包含头文件pthread.h,并且在比那一程序时使用选项-lpthread来链接线程库。 1、线程标识 就像每个进程有一个进程ID一样&#xff0c;…

Datawhale组队学习周报(第038周)

本周报总结了从 11月01日至11月07日&#xff0c;Datawhale组队学习的运行情况&#xff0c;我们一直秉承“与学习者一起成长的理念”&#xff0c;希望这个活动能够让更多的学习者受益。 第 30 期组队学习一共 8 门开源课程&#xff0c;共组建了 8 个学习群&#xff0c;参与的学…

OpenGL概念辨析: 窗口,视口,裁剪区域

1.窗口&#xff1a;这就不用解释了吧 2.视口&#xff1a;就是窗口中用来显示图形的一块矩形区域&#xff0c;它可以和窗口等大&#xff0c;也可以比窗口大或者小。只有绘制在视口区域中的图形才能被显示&#xff0c;如果图形有一部分超出了视口区域&#xff0c;那么那一部分是看…

java源码推荐_基于java的推荐系统实现源代码

【实例简介】常用推荐算法java实现~涉及多种相似度计算&#xff0c;比如cosine相似度&#xff0c;欧氏距离等~(recommand algirithm )【实例截图】【核心代码】RecommendSystemJavaCode└── Recommend└── src├── collaborative│ ├── cache│ │ ├── FileS…

ref与out的区别

前一段时间老用ref与out 感觉他们的效果差不多&#xff0c;就去网上查了一下他们的区别&#xff0c;网上说的概念性的东西太多了&#xff0c;后来通过自己的摸索发现他们有一个规律 ref: 在引用方法之外必须赋初值 static void TestRefAndRef(){string s1"test";Test…

【组队学习】【31期】组队学习内容详情

第31期 Datawhale 组队学习活动马上就要开始啦&#xff01; 本次组队学习的内容为&#xff1a; IOS开发基于Python的办公自动化吃瓜教程——西瓜书南瓜书LeetCode 刷题李宏毅机器学习&#xff08;含深度学习&#xff09;动手学数据分析SQL编程语言数据可视化&#xff08;Matpl…

区块链到底是什么?

2019独角兽企业重金招聘Python工程师标准>>> 欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 翻译人&#xff1a;ArrayZoneYour&#xff0c;该成员来自云社区翻译社 原文链接&#xff1a;https://www.investinblockchain.com/what-exactly-is-…

java怎么返回xml_java – 如何从Web服务返回XML

这可能是疯狂/愚蠢/愚蠢/冗长的问题之一,因为我是网络服务的新手.我想写一个Web服务,它将以XML格式返回答案(我正在使用我的服务进行YUI自动完成).我正在使用Eclipse和Axis2并遵循http://www.softwareagility.gr/index.php?qnode/21我希望以下列格式回复代码元素的数量可能因响…

jsp路径问题

绝对路径&#xff1a;/StudentInfo/images/login.jpg 相对路径&#xff1a;images/login.jpg 路径前面的第一个/代表tomcate目录下面的webapps这个文件夹 jsp的Advanced模版。。。默认有一个基准路径,所有写的路径都会变成绝对路径。 测试的时候发现&#xff0c;在IE下面可以正…

写一篇C语言入门第一讲

嗨~大家好~ 我是小白&#xff0c;最近才使用这个博客&#xff0c;我是一个计算机系的学生&#xff0c;我会在这里发一些我给我们班其他同学讲C语言入门的博文&#xff0c;希望大家能共享这些资料&#xff0c;当然了&#xff0c;我也很希望大家给我提出好的意见或建议。&#x…

李嘉骐:03 PyTorch模块与基础实战

深入浅出Pytorch 03 PyTorch模块与基础实战 内容属性&#xff1a;深度学习&#xff08;实践&#xff09;专题航路开辟者&#xff1a;李嘉骐、牛志康、刘洋、陈安东领航员&#xff1a;叶志雄航海士&#xff1a;李嘉骐、牛志康、刘洋、陈安东开源内容&#xff1a;https://githu…

math.hypot java_Java之Math类

Java之Math类#Java的Math类封装了很多与数学有关的属性和方法,后续遇到常用也会直接在这篇博客更新。。。###public static void t2() {System.out.println(Math.E);//比任何其他值都更接近 e(即自然对数的底数)的 double 值。System.out.println(Math.PI);//比任何其他值都更接…

ruby Mixin用法

module MyNA"China"attr:nameattr:agedef set_name(name)namenameenddef get_namereturn nameenddef set_age(age)ageageend endclass Testinclude My endtTest.new t.set_name("history") p t.get_name 转载于:https://www.cnblogs.com/wangwenfei/p/ruby…

delphi ScriptGate 调用JS

在 FireMonkey 使用 TWebBrowser 调用 Javascript函数并获取返回值以及 JavaScript 中调 Delphi 的函数/过程&#xff0c;普遍都在使用老掉牙的URL重定的方法&#xff0c;还要改 FMX 的源码&#xff0c;相当繁琐。 现在使用 ScriptGate 可轻易解决这个问题&#xff0c;ScriptGa…

【NCEPU】韩绘锦:扩散卷积神经网络

韩绘锦是华北电力大学数理系大四的学生&#xff0c;Datawhale成员/Dreamtech成员&#xff0c;也在天池比赛中取得了不错的成绩&#xff0c;现保送大连理工大学软件工程学院深造。 这篇图文是他在线下组队学习时&#xff0c;分享的内容。 希望参与我们组队学习的同学可以在微信…

java 解压与压缩代码_Java实现多文件压缩和解压缩代码详解

Java实现多文件压缩和解压缩代码import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.Enumeration;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;…

关系管理系统:js代码生成select的出生日期

//page初始调用function pageInit() {makeYear();makeMonth();makeDay();} //产生Year function makeYear(){var year document.getElementById("year");for(var i1901;i<new Date().getYear();i){var option document.createElement("option");optio…

【组队学习】【31期】IOS开发

IOS开发 航路开辟者&#xff1a;李岳昆、易远哲领航员&#xff1a;杨皓博航海士&#xff1a;李岳昆、易远哲 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/team-learning-program/tree/master/IOS内容属性&#xff1a;公测课程内容说明&#xff1a;iOS开…

amh支持java吗_跟我学Android之三 常用视图

目标掌握视图的概念。明白Activity与Widget的区别。掌握XML方式布局界面的特点和一些基本特性。掌握几种常见基本视图的用法学会使用代码方式进行界面布局的方法。熟练掌握界面程序的事件驱动模型视图(View)是可视化的界面元素,任何可视化组件都需要从android.view.View类继承,…

Linux 终端命令行提示符的艺术--PS1进阶

话不多说&#xff0c;先瞅瞅我的命令行提示符&#xff08;有点大&#xff09;&#xff1a; 图中命令行解释&#xff1a;┌[阳历日期/农历日期 时间]├[当前目录下目录数当前目录下文件数][当前绝对目录]└[用户名主机名-第几个终端 ╰_╯] 相关配置文件 全局配置文件&#xff1…

Centos 7 冗余备份磁盘配置介绍

Centos 7 冗余备份磁盘配置介绍我们上一盘介绍了Centos 7 磁盘阵列配置介绍&#xff0c;今天继续上一篇的配置介绍&#xff0c;通过上一篇的配置介绍我们发现了一个问题。&#xff0c;运维人员需要在硬盘硬件出现故障后&#xff0c;手动增加新的硬盘进去&#xff0c;这样很不方…

【组队学习】【31期】基于Python的办公自动化

基于Python的办公自动化 航路开辟者&#xff1a;牧小熊、刘雯静、张晓东、吴争光、隆军领航员&#xff1a;六一航海士&#xff1a;牧小熊、李显、刘羽中、王晓亮 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/team-learning-program/tree/master/Office…

java urlconn 下载慢_使用HttpURLConnection下载文件时出现 java.io.FileNotFoundException彻底解决办法...

import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;/*** 多线程下载* author bing**/public class OmbDownloadOfThreadsUtil …