MongoDB的shell操作

学习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”})
如果没有 set3.db.users.update(name:Jim,$unset:sex:1); unset操作符表明是更新,所做的操作是删除掉参数对象中的字段属性($unset操作符的操作对象中属性值为1);
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()查询文档的数目。
范围查询操作符: gt lt, gte lte分别表示大于、小于、大于等于、小于等于。
单范围条件查询: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索引。
创建索引之后,再进行查询,就会扫描索引,从而提升查询效率。

猜你喜欢

转载自blog.csdn.net/achang07/article/details/78778694