学习MongoDB相关的CRUD操作,使用mongo.exe这个shell工具执行相关命令,同时在RoboMongo这个可视化工具中可以看到操作结果。
如下图是两个操作界面:
ConEmu:
RoboMongo:
MongoDB的三级结构
MongoDB的数据组织分为三级:Database,Collection,Document;分别是数据库,集合,文档。
启动shell
执行命令:mongo localhost:27017/shellTest,自动切换到shellTest库(如果该库尚未创建,则自动创建)。
如果要切换数据库,与MySQL类似,直接使用use xxx命令即可。
增删改
插入文档
db.users.insert({name: “Jim”});
db.users.insert({name: “Jack”});
执行结果如下:
更新文档
有两种类型的更新:在一个文档或者多个文档上进行修改;直接替换文档。
1. db.users.update({name: “Jim”}, {set: {sex: “man”}});
update命令,第一个对象参数为查找条件,第二个对象参数为更新内容,set操作符表明update操作是更新而不是替换;
2. db.users.update({name: “Jack”}, {sex: “woman”})
如果没有
4. 复杂更新操作:
db.users.update({
name: "Rose"
},
{
$set: {
hobbies: {
movies: [
"ghost",
"matrix"
],
sports: [
"football",
"pingpong"
]
}
}
});
执行之后的返回结果:
删除文档
清空所有文档:db.users.remove();
条件删除:db.users.remove({name: “Rose”});
集合的删除不使用remove命令,而使用drop命令:db.users.drop();
查询
不带条件的查询:db.users.find();
该查询等价于db.users.find({});
这个查询可以查出该集合Collection中所有的文档数据。
条件查询:db.users.find({name: “Rose”});
子文档条件查询:db.users.find({“hobbies.sports”: “football”});从这个查询可以看出来做的不是精确匹配,因为数组元素中有一个匹配到了就查询到了。
db.users.count()查询文档的数目。
范围查询操作符:
单范围条件查询:db.users.find({age: {gt: 20}});
复合范围条件查询:db.numbers.find({number: {lt: 100, $gt: 50}});
文档索引
首先介绍一下explain:在执行查询的时候如下调用一下该方法:db.numbers.find({number: {$lt: 20}}).explain(“executionStats”);
可以返回对于该查询的分析(重点看红框的totalKeysExamined和totalDocsExamined,代表该次查询所扫描的索引和文档数):
创建索引:
db.numbers.createIndex({number: 1});
查看索引:
db.numbers.getIndexes();
如上图所示,可以看到该集合共有两个索引,其中一个为MongoDB自动为_id创建的索引;另一个是手动创建的number索引。
创建索引之后,再进行查询,就会扫描索引,从而提升查询效率。