MongoDB学习笔记之 第2章 MongoDB的增删改查

第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()

 

db.collection.insert(document)
        Insert()方法有以下行为:

 

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

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

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

 

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

 

2.3 Save()

 

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

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

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

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

 

2.4 Update()

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从文档中移除指定的键。

 

 

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

2.5 Find()

db.collection.find(<criteria>, <projection>)
db.collection.findOne(<criteria>, <projection>)

 

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

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

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

db.collection.find(<criteria>, <projection>)返回集合
db.collection.findOne(<criteria>, <projection>)返回一个
db.user.find({_id: "1"})
db.user.find({works: 5})
db.user.find().sort({age:1})
db.user.find().limit(2).sort({age:1})
db.user.find().skip(1).limit(2).sort({age:1})

 

2.6 Remove()

db.collection.remove(query, justOne)

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

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

db.user.remove({_id: "4"}, true)

 

2.7 Count()

db.collection.count(<query>)

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

db.user.count({age: 1})

  

2.8 Distinct()

db.collection.distinct(field, query)

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

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

 db.user.distinct("_id", {age: 1})

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值