Mongodb增删改查

admin   ·   发表于 2个月前   ·   数据库

Mongodb数据库增删改查

一、插入文档:db.COLLECTION_NAME.insert(document)

 

  1. db.col.insert({title: 'MongoDB 教程',
  2. description: 'MongoDB 是一个 Nosql 数据库',
  3. by: 'MongoDB中文网',
  4. url: 'http://www.mongodb.org.cn',
  5. tags: ['mongodb', 'database', 'NoSQL'],
  6. likes: 100
  7. })

插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。

二、更改文档:update()

update() 方法用于更新已存在的文档。语法格式如下:


  1. db.collection.update(    
  2. <query>,
  3. <update>,
  4. {
  5. upsert: <boolean>,
  6. multi: <boolean>,
  7. writeConcern: <document>
  8. }
  9. )

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。

例如:db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})

以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。

 


  1.   
  2. >db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})

 

 

save() 方法通过传入的文档来替换已有文档。语法格式如下:


  1. db.collection.save(    
  2. <document>,
  3. {
  4. writeConcern: <document>
  5. }
  6. )

参数说明:

  • document : 文档数据。
  • writeConcern :可选,抛出异常的级别。

实例

以下实例中我们替换了 _id 为 56064f89ade2f21f36b03136 的文档数据:


  1. >db.col.save({  	
  2. "_id" : ObjectId("56064f89ade2f21f36b03136"),
  3. "title" : "MongoDB",
  4. "description" : "MongoDB 是一个 Nosql 数据库",
  5. "by" : "MongoDB中文网",
  6. "url" : "http://www.mongodb.org.cn",
  7. "tags" : [
  8. "mongodb",
  9. "NoSQL"
  10. ],
  11. "likes" : 110
  12. }
  13. )

只更新第一条记录:


  1. db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );

全部更新:


  1. db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );

只添加第一条:


  1. db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );

全部添加加进去:


  1. db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );

全部更新:


  1. db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );

只更新第一条记录:


  1. db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

 

 

三、删除文档

我们移除 title 为 'MongoDB 教程' 的文档:


  1.   >db.col.remove({'title':'MongoDB 教程'})  WriteResult({ "nRemoved" : 2 })           # 删除了两条数据  >db.col.find()  ……                                        # 没有数据  

如果你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示:


  1. >db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)

如果你想删除所有数据,可以使用以下方式(类似常规 SQL 的 truncate 命令):


  1. >db.col.remove({})  
  2. >db.col.find()
  3. >

四、查询文档

MongoDB 查询数据的语法格式如下:


  1. >db.COLLECTION_NAME.find()

find() 方法以非结构化的方式来显示所有文档。

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:


  1. >db.col.find().pretty()  

pretty() 方法以格式化的方式来显示所有文档。

除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。

如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

操作 格式 范例 RDBMS中的类似语句
等于 {<key>:<value>} db.col.find({"by":"菜鸟教程"}).pretty() where by = '菜鸟教程'
小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50

MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,及常规 SQL 的 AND 条件。

语法格式如下:


  1.   >db.col.find({key1:value1, key2:value2}).pretty()  

MongoDB OR 条件语句使用了关键字 $or,语法格式如下:


  1. >db.col.find( {  $or: [{key1: value1}, {key2:value2} ] }  ).pretty()  

以下实例演示了 AND 和 OR 联合使用,类似常规 SQL 语句为: 'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'


  1. >db.col.find({"likes": {$gt:50}, $or: [{"by": "Mongodb中文网"},{"title": "MongoDB 教程"}]}).pretty()
0 Reply   |  Until 2个月前 | 39 View
LoginCan Publish Content