MongoDB常用语法及基本使用

MongoDB中的三个概念:

  • 数据库(database): 一个仓库,在其中可以存放集合。

  • 集合(collection): 概念相当于MySQL中的表,类似于一个数组,在集合中可以存放文档。

  • 文档(document): 文档是数据库中的最小单位,我们存储和操作的内容都是文档。

注意:在MongoDB中,数据库和集合都不需要手动创建,当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数据库和集合。

我们可以使用一些图形化界面工具来帮助我们操作MongoDB,如:NoSQL Manager for MongoDB

mongodb_manager

1. 基本指令

  • show dbs/databases: 查看当前所有的数据库

  • use (数据库名): 进入到指定的数据库中

  • db: 显示当前所处的数据库

  • show collections: 显示当前数据库中所有的集合


2. MongoDB的CRUD(增删改查)操作

2.1 插入: db.<collection>.insert(doc)

向数据库的指定集合中插入一个或多个文档

例如:

  • db.stu.insert({name:'Tom', age:18, gender:'male'})

  • db.stu.insert([{name:'Jerry', age:18, gender:'male'},{name:'Herry',age:20,gender:'female'}])

如果插入时没有给文档指定_id属性,则数据库会自动为文档添加_id属性(ObjectId)

相关方法:

  • db.<collection>.insertOne() —— 插入一个文档对象

  • db.<collection>.insertMany() —— 插入多个文档对象

如何插入10000条数据?

  • 可以用for循环:

        for(var i=0; i<10000; i++){
            db.numbers.insert({num:i});
        }
    
  • 但是要注意效率与性能问题:尽量减少对数据库的操作!

     var arr = [];
     for(var i=0; i<10000; i++){
         arr.push({num:i});
     }
     db.numbers.insert(arr);
    

2.2 查询: db.<collection>.find()

查询集合中的所有文档,返回的是一个数组

例: db.stu.find()

可以接收一个对象作为条件参数,表示查询符合条件的文档,{}表示查询所有。

例: db.stu.find({age:20})

支持通过内嵌文档的属性进行查询,通过.来匹配,注意属性名必须加引号!

例: db.stu.find({'hobby.movies':'comedy'})

并不是说属性值一定要等于该值,如果属性值是一个数组,只要数组中包含该值即可!

相关方法:

  • db.<collection>.findOne() —— 查询集合中符合条件的第一个文档,返回的是一个文档对象

  • db.<collection>.find({}).count() —— 查询集合中符合条件的文档的数量,返回一个数值。

  • db.<collection>.find({}).limit(10) —— 设置返回查询的数据的上限。

  • db.<collection>.find({}).skip(10).limit(10) —— 返回第11条到第20条数据。

  • db.<collection>.find({}).sort({num:1, age:-1}) —— 传递一个对象来指定排序规则,1表示升序,-1表示降序

  • MongoDB会自动调整sortskiplimit的位置,谁写前谁写后并无大碍。

  • distinct()对数据进行去重: db.stu.distinct('class',{age:{$gt:18}}) —— 查找年龄大于18的人的班级(去重)

投影:

  • 在做查询时,可以在第二个参数设置查询结果的投影,1表示显示,0表示不显示。

  • db.<collection>.find({}, {name:1}) —— 显示该集合文档的name字段和id字段(id默认显示)。

一些查询相关的运算符:

  • $gt$ltgtelte

    db.stu.find({num:{$gt:20, $lt:30}}) —— 返回num值大于20小于30的文档。

  • $or表示或,只要满足数组其中一个条件即可:

    db.stu.find({$or:[{num:{$lt:100}}, {num:{$gt:200}}]}) —— 返回num值小于100或者大于200的文档。


2.3 修改: db.<collection>.update({查询条件},{新对象},{options})

默认情况下会使用新对象来替换旧的对象。

如果需要修改指定的属性而不是替换,需要使用修改操作符来完成修改

  • $set 可以用来增加或修改文档中的指定属性

    如: db.stu.update({"_id":1}, {$set:{age:22,address:'China'}})

  • $unset 可以用来删除文档中的指定属性

    如: db.stu.update({"_id":1}, {$unset:{address:'这里是什么不重要,反正要删除'}})

update()默认情况下只改变一个,如果需要同时修改多个,增加第三个配置参数{multi:true},或者使用updateMany()

如果属性是一个数组,需要往数组中加入新的元素,则可以使用操作符$push:

  • 如: db.stu.update({username:'Tom'},{$push:{'hobby.movies':'Mr Bean'}})

  • $each可以对数组进行解构:{$push: {a: {$each: [1,2]}}} —— 向数组a中加入1和2。

  • $addToSet操作符也可向数组中添加一个新元素,与$push的区别是,不允许添加重复的元素。

使用操作符$pop从数组中移除一个元素,1代表最后一个元素,-1代表第一个元素:

  • {$pop: {a: 1}} —— 从数组a中移除最后一个元素

  • {$pop: {a: -1}} —— 从数组a中移除第一个元素

使用操作符$pull从数组中移除所有的指定元素:

  • {$pull: {a: 5}} —— 移除数组a中所有值为5的元素。

  • 使用操作符$pullAll来移除所有的多个指定元素:

  • {$pullAll: {a: [5, 6]}} —— 移除数组a中所有值为5或6的元素。

让属性值在原有基础上自增,使用操作符$inc:

  • db.stu.updateMany({num:{$lt:1000}}, {$inc:{num:400}}) —— 让所有num小于1000的文档num值增加400

相关方法:

  • db.<collection>.updateOne() —— 修改一个符合条件的文档

  • db.<collection>.updateMany() —— 修改多个符合条件的文档

  • db.<collection>.replaceOne() —— 替换一个文档中的某些属性


2.4 删除: db.<collection>.remove({},Boolean)

remove()必须传入参数,可以根据条件对象来删除文档,传递条件的方式和find()一样,默认情况下会同时删除多个,相当于deleteMany()

  • 如果传入第二个参数为true,则只会删除一个,相当于deleteOne()

  • 如果传入第一个参数对象为{},则会清空所有的文档,相当于删除集合,但是性能比较差,不如用db.<collection>.drop()

相关方法:

  • db.<collection>.deleteOne() —— 删除一个

  • db.<collection>.deleteMany() —— 删除多个

  • db.<collection>.drop() —— 删除集合

  • db.dropDatabase() —— 删除数据库

一般在实际生产中,数据不会真正地删除,而是做逻辑删除。比如给集合中的每个文档增加一个数据字段isDel,设置值为1,标记为删除。

  • 4
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值