第2章 MongoDB的增删改查

转自:http://limingnihao.iteye.com/blog/1938383

第2章 MongoDB的增删改查

(黎明你好原创作品,转载请注明)

 

        MongoDB中数据的基本单元叫做文档,采用json的键-值的方式。多个键及其关联的值有序的存放在一起变是文档。类似于编程语言中的键值关系。MongoDB文档都是BSON文档,他是一个JSON的二进制形式。

        MongoDB的文档

 
 

         MongoDB中文档被存储在集合中。集合是一组有关系索引的文档。集合类似于关系数据库中的表。

        MongoDB的集合

 
 

 

2.1 方法参考

查询游标方法

名称说明
cursor.count()返回游标中的文档的数量。
cursor.explain()报告的查询执行计划,包括索引使用的游标。
cursor.hint()若要使用查询的特定索引的部队 MongoDB。
cursor.limit()约束游标的结果集的大小。
cursor.next()返回游标中的下一个文档。
cursor.skip()返回一个游标,开始传递或跳过的一些文件后才返回结果。
cursor.sort()返回结果排序根据排序的规范。
cursor.toArray()返回一个数组,包含由光标返回的所有文档。

 

 

名称说明
db.collection.insert()在集合中创建一个新文档。
db.collection.save()提供insert()和update ()插入新文件的包装。
db.collection.update()修改集合中的文档。
db.collection.find()集合上执行查询,并返回一个游标对象。
db.collection.findOne()执行查询,并返回一个单独的文档。
db.collection.remove()从集合中删除的文件。
db.collection.count()换行计数集合或匹配查询中返回的文档数的计数。
db.collection.distinct()返回一个数组没有指定的字段不重复值的文件。

 

 

2.2 Insert()

 

Java代码   收藏代码
  1. db.collection.insert(document)  
        Insert()方法有以下行为:

 

        如果该集合不存在,insert()方法将创建集合。

        如果文档没有指定一个_id后缀字段,然后 MongoDB 将添加一个_id字段并使用ObjectId为文档分配取值。

        如果文档需要增加一个新的字段,则insert()方法可以为文档插入新的字段。这不需要更改集合的数据模型或现有的文档。

 

Java代码   收藏代码
  1. db.user.insert({_id: "1", name:{username: "limingnihao", nickname: "黎明你好"}, password: "123456"})  
  2. db.user.insert({_id: "2", name:{username: "zhoujielun", nickname: "周杰伦"}, password: "123456", birth: ISODate('1979-01-18')})  
  3. db.user.insert({_id: "3", name:{username: "caiyilin", nickname: "蔡依林"}, password: "123456", birth: ISODate('1980-09-15'), special:["看我72变""花蝴蝶""特务J"], regionName: "台湾"})  
 

 

2.3 Save()

 

Java代码   收藏代码
  1. db.collection.save(document)  
         插入一个新的文档,或者根据其文档的参数更新现有的文档。

        如果文档不包含一个_id的字段进行save时,mongod将向文档中添加一个_id字段并将其分配一个ObjectId。

        如果文档中包含一个_id字段和值进行save ()方法时,则在集合中查询此_id的文档执行的是upsert操作。如果集合中不存在具有指定的_id值的文档,save ()方法执行的是insert操作。save ()方法执行时会将现有文档中的所有字段都替换为新文档中字段。

Java代码   收藏代码
  1. db.user.save({_id: "1", name:{username: "limingnihao", nickname: "黎明你好"}, password: "123456", birth: ISODate('1985-07-15')})  

 

2.4 Update()

Java代码   收藏代码
  1. db.collection.update( <query>, <update>, <upsert>, <multi> )  

        修改现有存在的文档或集合时使用。

        默认的update()方法值更新单个文档。但是如果multi参数设置为true,则更新操作可以更新全部符合条件的文档。

Query – 类型:文档;用于更新选择过滤。

Update – 类型:文档;需要更新的文档的内容。

Upsert – 类型:文档或boolean;设置为true时,当查询没有匹配到文档时进行新建。默认值为false

Multi: - 类型:文档或boolean;设置为true时,则更新满足查询条件的所有文档(多个)。设置为false时只更新单个文档。默认为false。

 

字段更新操作方式

名字说明
$inc用来增加已有键的值,或者在键不存在时创建一个键。是专门来增加(和减少)数字的。只能用于整数、长整数或双精度浮点数。要是用在其他类型的数据上就会导致操作失败。
$rename重命名字段。新的字段名称不能和文档中现有的字段名相同。
$setOnInsert执行insert操作时,操作给相应的字段赋值。
$set用来指定一个键的值。如果这个键不存在,则创建它。
$unset从文档中移除指定的键。

 

 

Java代码   收藏代码
  1. db.user.update({_id: "1"}, {$inc:{age: 1}}, {multi:true})  
  2. db.user.update({_id: "1"}, { $rename: { 'password''pwd'}})  
  3. db.user.update({_id: "4"}, { $setOnInsert: { works: 5}}, {upsert: true})  
  4. db.user.update({_id: "1"}, {$set:{password: "654321", age: 28}})  
  5. db.user.update({_id: "4"},{$unset: {"works"5 }})  

2.5 Find()

Java代码   收藏代码
  1. db.collection.find(<criteria>, <projection>)  
  2. db.collection.findOne(<criteria>, <projection>)  

 

Criteria - 类型:文档;可选,文档的查询过滤条件。

Projection - 类型:文档,对结果进行字段匹配,{ field1: <boolean>, field2: <boolean> ... }。

后面还可以:Sort()排序、Limit()限制个数、Skip()起始点。

Java代码   收藏代码
  1. db.collection.find(<criteria>, <projection>)返回集合  
  2. db.collection.findOne(<criteria>, <projection>)返回一个  
  3. db.user.find({_id: "1"})  
  4. db.user.find({works: 5})  
  5. db.user.find().sort({age:1})  
  6. db.user.find().limit(2).sort({age:1})  
  7. db.user.find().skip(1).limit(2).sort({age:1})  

 

2.6 Remove()

Java代码   收藏代码
  1. db.collection.remove(query, justOne)  

Query – 类型:文档;用于删除选择过滤。

JustOne – 类型:boolean;当设置为true时只删除一个文档。

Java代码   收藏代码
  1. db.user.remove({_id: "4"}, true)  

 

2.7 Count()

Java代码   收藏代码
  1. db.collection.count(<query>)  

 Query – 类型:文档;用于查询选择过滤。

Java代码   收藏代码
  1. db.user.count({age: 1})  

  

2.8 Distinct()

Java代码   收藏代码
  1. db.collection.distinct(field, query)  

Field – 类型:字符串;返回非重复的字段。

Query – 类型:文档;查询条件。

Java代码   收藏代码
  1. db.user.distinct("_id", {age: 1})  
weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值