文章目录

  • 写在前面的
  • 一、查询
  • 二、插入
  • 三、删除
  • 四、修改
  • 五、批量操作
  • 写在最后的


写在前面的

mongo数据库是nosql数据库的一种,它是面向集合存储的,以存储对象类型的数据。刚开始接触mongo时,经常去百度一些mongo的语法仅仅是为了完成工作,周围的同事对mongo的了解感觉也不是很深,这就坚定了我要把一些mongo中常用语法和操作整理下来的想法,自己总结的同时,希望也能给大家带来帮助。

一、查询

以下示例仅以 "存在一个collection为student,该collection具有name、IDCard,age、sex、createTime等5个字段” 为前提。

  • 查询性别为男的学生:db.student.find({“sex”:“男”})
  • 查询年龄大于18岁的学生:db.student.find(“age”:{$gt:18})
  • 查询年龄是17,18的学生:db.student.find({“age”:{"$in":[17,18]}})
成员运算in和not in对应在MongoDB中形式为$in , $nin
  • 查询年龄小于18且大于16岁的学生:db.student.find(“age”:{$lt:18,$gt:16})
对于关系运算符还有:$ne:不等于、$lte:小于等于、$gte:大于等于
  • 查询年龄大于16且小于19,或者是年龄为14的学生:db.student.find({$or:[{“age”:{$lt:19,$gt:16}},{“age”:14}]})
对于逻辑运算符还有:$and(与),$or(或),$not(非)
其用法与$or的用法类似,可以参照上边的示例写与或非的逻辑语句
三种逻辑运算也可以混合使用
比如db.collectionName.find({条件1},{$or:[条件2,条件3]},{"字段1":{$not:值1}})
等价于SQL:select * from collectionName where 条件1 and (条件2 or 条件3) and 字段1!=值1
可以灵活组合使用
  • 查询姓诸葛的学生:db.student.find(“name”:{$regex:/^诸葛/})
  • 查询名字中包含"/莹/"字的学生(需要用\进行转义特殊字符):db.student.find(“name”:{$regex:/\/莹\//})

关于mongo中的模糊查询是通过$regex运算符使用正则表达式来进行查询的,了解一些常用的正则表达式的语法还是非常有必要的,在应用的时候可以有意识的去实验实验正则表达式,关于mongo正则表达式查询还有更加详细的介绍,推荐阅读:Mongodb正则表达式$regex操作符

  • 在查询的时候当然也可以进行多个条件的组合使用,比如说查询性别为男,年龄为18的学生:db.student.find({“sex”:“男”,“age”:18})

二、插入

  • db.collectionName.insertOne({“name”:“张三”,“sex”:“男”}):向指定集合中插入一条文档数据
  • db.collectionName.insertMany({“name”:“张三”,“sex”:“男”},{“name”:“李四”,“sex”:“男”}):向指定集合中插入多条文档数据
  • db.collectionName.save({},{}…)
insert与save的区别
insert:插入操作,如果collection中存在相同文档,插入会报错;如果不存在就执行插入。
save:从字面意思上看是保存。如果collection中存在相同文档,就会更新;如果不存在就执行插入
  • 顺便提一嘴,当从mongo的客户端向mongo中导入json格式的数据时,执行的就是save操作,可以根据这一特点,去覆盖mongo中已经存在的数据,以达到更新的目的。

三、删除

  • db.student.deleteMany({}):删除student collection中的所有文档
  • db.student.deleteOne({}): 删除student collection中的一个文档
  • db.student.remove({}):清空collection的所有文档
在delete和remove语法中的{}是可以写条件的
比如
db.student.deleteMany({"sex":"男"}),用来指定删除条件,即删除性别为男的文档

四、修改

  • $set修改器
修改指定查询条件的字段值(更新name为"小张"文档的sex为女):db.student.update({"name":"小张"},{$set:{"sex":"女"}})
update中前面的{}里边写更新文档的查询条件,后边的就是需要更新的字段和值,里边均可以写多个条件中间以逗号分隔
  • $unset修改器
主要是用来删除键的
用法:db.student.update({"name":"小张"},{$unset:{"sex":1}})
删除name为小张文档的sex字段(键),当然unset的{}括号里也可以写多个字段,以达到删除多个键的目的。
使用修改器$unset时,不论对目标键使用1、0、-1等数字或者具体的字符串等都是可以删除该目标键的。
即{$unset:{"sex":1}}和{$unset:{"sex":"hello"}}等都可以达到同样的删除效果

五、批量操作

对于mongo中的批量操作可以借助forEach方法来达到相应的效果。下面介绍一下个人用到的批量操作,对于其他的批量操作也可以借鉴这种方式达到自己想要的效果。
批量修改一:

感觉举得这个例子不太好...
    db.student.find({"sex" : "男"}).forEach(
    function(item){ 
    db.student.update({"_id":item._id},{$set:{"age":18}})
    }
    )


写在最后的

这里只是简单介绍了几类常用的语法,后边的删、改、批量操作都有用到查询语法的地方,因此对于mongo中的查询条件编写要重点掌握。

能出现在生活中的事物总是一种缘分,应该留下一些痕迹。。。