MongoDB教程
第八章 MongoDB文档增删查改
## 插入文档 #### insert() 与 save() 方法 - 语法: - db.collection_name.insert(document) - db.collection_name.save(document) - 语法说明: - save():如果 _id 主键存在则更新数据,如果不存在就插入数据。不过该方法在新版本的 MongoDB 中已废弃,您可以使用 insertOne() 或 replaceOne() 方法来代替; - insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,并提示主键重复,不保存当前数据。 - 例子: ```shell >db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: 'w3cschool', url: 'http://www.w3cschool.cn', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }) >db.col.insert([{ title: 'MongoDB 教程1', description: 'MongoDB 是一个 Nosql 数据库1', by: 'w3cschool', url: 'http://www.w3cschool.cn', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 },{ title: 'MongoDB 教程1', description: 'MongoDB 是一个 Nosql 数据库2', by: 'w3cschool', url: 'http://www.w3cschool.cn', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }]) ``` #### insertOne() 方法 - insert() 方法可以同时插入多个文档,但如果您只需要将一个文档插入到集合中的话,可以使用 insertOne() 方法, - 语法:db.collection_name.insertOne(document) - 例子: ```shell > db.user.insertOne({ title:"编程帮", url:"www.biancheng.net", course:"MongoDB教程" }) ``` #### insertMany() 方法 - 与 insert() 方法相同,您可以使用 insertMany() 方法向集合中插入多个文档,但在使用 insertMany() 方法时您需要向方法中传递一个文档数组, ## 更新文档 #### update() 方法 - 语法 ```shell db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } ) ``` - 参数说明: - query : update的查询条件,类似sql update查询的where子句。 - update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为 sql update查询的set子句 - upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。 - multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 - writeConcern :可选,抛出异常的级别。 - 实例 ```shell #更新标题(title) >db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}}) #以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。 >db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true}) ``` #### save() 方法 - save() 方法通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入。 - 语法 ```shell db.collection.save( <document>, { writeConcern: <document> } ) ``` - 参数说明: document : 文档数据。 writeConcern :可选,抛出异常的级别。 - 实例 ```shell ##替换了 _id 为 56064f89ade2f21f36b03136 的文档数据: >db.col.save({ "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "MongoDB", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "W3Cshcool", "url" : "http://www.w3cschool.cn", "tags" : [ "mongodb", "NoSQL" ], "likes" : 110 }) ``` #### 更多实例 ```shell 只更新第一条记录: db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } ); 全部更新: db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true ); 只添加第一条: db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false ); 全部添加进去: db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true ); 全部更新: db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true ); 只更新第一条记录: db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false ); ``` ## 删除文档 - 语法 ```shell db.collection_name.remove( <query>, { justOne: <boolean>, writeConcern: <document> } ) ``` - 参数说明: query:可选参数,定义要删除文档的条件; justOne:可选参数,如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档; writeConcern:可选参数,定义抛出异常的级别。 - 实例 ```shell >db.course.remove({'title':'MongoDB教程'}) #将ustOne 参数设置为 1 或 true,只删除其中的第一个文档 >db.course.remove({'title':'MongoDB教程'},{justOne:true}) #删除集合中的所有文档,等效于 SQL 语句中的 truncate 命令 >db.course.remove({}) >db.col.find() ``` ##查询文档 #### find() 方法 - 语法:db.collection_name.find(query, projection) - 参数: query:可选参数,使用查询操作符指定查询条件; projection:可选参数,使用投影操作符指定返回的键。查询时若要返回文档中所有键值,只需省略该参数即可(默认省略)。 #### pretty() 方法 仅使用 find() 方法查询出的结果看起来比较凌乱,MongoDB 中还提供了一个 pretty() 方法来格式化查询到的结果,让查询到的数据以更易读的方式展示出来。 - 语法:db.collection_name.find(query, projection).pretty() #### findOne() 方法 除了可以使用 find() 方法外,还可以使用 findOne() 方法查询集合中的文档,但 findOne() 方法仅能返回一个查询到的文档。 - 语法:db.collection_name.findOne(query, projection) #### MongoDB 与 RDBMS Where 语句比较 | 操作 | 格式 | 范例 | RDBMS中的类似语句 | |-----|-----|-----| | 等于 | ?{<key>:<value>}? | db.col.find({"by":"w3cschool"}).pretty() | where by = 'w3cschool' | | 小于 | {<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 AND和OR #### MongoDB AND 条件 - 语法 > db.col.find({key1:value1, key2:value2}).pretty() - 实例 > db.col.find({"by":"w3cschool", "title":"MongoDB 教程"}).pretty() ####MongoDB OR 条件 - 语法 >db.col.find({$or: [{key1: value1}, {key2:value2}]}).pretty() - 实例 >db.col.find({$or:[{"by":"w3cschool"},{"title": "MongoDB 教程"}]}).pretty() #### AND 和 OR 联合使用 >db.col.find({"likes": {$gt:50}, $or: [{"by": "w3cschool"},{"title": "MongoDB 教程"}]}).pretty() - 类似常规 SQL 语句为: 'where likes>50 AND (by = 'w3cschool' OR title = 'MongoDB 教程')'
顶部
收展
底部
[TOC]
目录
第一章 NoSQL和MongoDB简介
第二章 MongoDB安装
第三章 MongoDB概念
第四章 MongoDB数据类型
第五章 MongoDB连接数据库
第六章 MongoDB数据库增删查
第七章 MongoDB集合增删查
第八章 MongoDB文档增删查改
第九章 MongoDB查询构造器
第十章 MongoDB备份与恢复
第十一章 MongoDB复制(副本集)
第十一章 MongoDB分片
第十一章 MongoDB监控
第十二章 MongoDB索引
相关推荐
MongoDB进阶
PHP操作MongoDB
MongoDB用户及安全
MongoDB优化