目录

插入文档

实例

MongoDB 删除文档

语法

实例

MongoDB 查询文档

语法

实例

MongoDB 与 RDBMS Where 语句比较

MongoDB AND 条件

实例

MongoDB OR 条件

实例

AND 和 OR 联合使用


本章节中我们将向大家介绍如何将数据插入到 MongoDB 的集合中。

文档的数据结构和 JSON 基本一样

所有存储在集合中的数据都是 BSON 格式。

BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。


插入文档

MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:

db.COLLECTION_NAME.insert(document)
或
db.COLLECTION_NAME.save(doctument)
  • save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 来代替。(变通插入)
  • insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。(强行插入)

3.2 版本之后新增了 db.collection.insertOne() 和 db.collection.insertMany()。

db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下:

db.collection.insertOne(<document>,{writeConcern: <document>}
)

db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下:

db.collection.insertMany([ <document 1> , <document 2>, ... ],{writeConcern: <document>,ordered: <boolean>}
)

参数说明:

  • document:要写入的文档。
  • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
  • ordered:指定是否按顺序写入,默认 true,按顺序写入。

实例

以下文档可以存储在 MongoDB 的 runoob 数据库 的 col 集合中:

db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库',by: '菜鸟教程',url: 'http://www.runoob.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 100
})

以上实例中 col 是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。

查看已插入文档:

db.col.find()
{ "_id" : ObjectId("56064886ade2f21f36b03134"),
"title" : "MongoDB 教程","description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程","url" : "http://www.runoob.com",
"tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }

我们也可以将数据定义为一个变量,如下所示:

document=({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库',by: '菜鸟教程',url: 'http://www.runoob.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 100
});

执行后显示结果如下:

{"title" : "MongoDB 教程","description" : "MongoDB 是一个 Nosql 数据库","by" : "菜鸟教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100
}

执行插入操作:

db.col.insert(document)
WriteResult({ "nInserted" : 1 })

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


3.2 版本后还有以下几种语法可用于插入文档:

  • db.collection.insertOne():向指定集合中插入一条文档数据
  • db.collection.insertMany():向指定集合中插入多条文档数据

一次插入多条数据

1、先创建数组

2、将数据放在数组中

3、一次 insert 到集合中

var arr = [];for(var i=1 ; i<=20000 ; i++){arr.push({num:i});
}db.numbers.insert(arr);

MongoDB 删除文档

在前面的几个章节中我们已经学习了 MongoDB 中如何为集合添加数据和更新数据。在本章节中我们将继续学习 MongoDB 集合的删除。

MongoDB remove() 函数是用来移除集合中的数据。

MongoDB 数据更新可以使用 update() 函数。在执行 remove() 函数前先执行 find() 命令来判断执行的条件是否正确,这是一个比较好的习惯。

语法

remove() 方法的基本语法格式如下所示:

db.collection.remove(<query>,<justOne>
)

如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:

db.collection.remove(<query>,{justOne: <boolean>,writeConcern: <document>}
)

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
  • writeConcern :(可选)抛出异常的级别。

实例

以下文档我们执行两次插入操作:

>db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库',by: '菜鸟教程',url: 'http://www.runoob.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 100
})

使用 find() 函数查询数据:

 db.col.find()
{ "_id" : ObjectId("56066169ade2f21f36b03137"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
{ "_id" : ObjectId("5606616dade2f21f36b03138"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }

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

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

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

db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)

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

>db.col.remove({})
>db.col.find()

remove() 方法已经过时了,现在官方推荐使用 deleteOne() 和 deleteMany() 方法。

如删除集合下全部文档:

db.inventory.deleteMany({})

删除 status 等于 A 的全部文档:

db.inventory.deleteMany({ status : "A" })

删除 status 等于 D 的一个文档:

db.inventory.deleteOne( { status: "D" } )

MongoDB 查询文档

MongoDB 查询文档使用 find() 方法。

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

语法

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

db.collection.find(query, projection)
  • query :可选,使用查询操作符指定查询条件
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

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

db.col.find().pretty()

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

实例

以下实例我们查询了集合 col 中的数据:

 db.col.find().pretty()
{"_id" : ObjectId("56063f17ade2f21f36b03133"),"title" : "MongoDB 教程","description" : "MongoDB 是一个 Nosql 数据库","by" : "菜鸟教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100
}

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


MongoDB 与 RDBMS Where 语句比较

如果你熟悉常规的 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 AND 条件

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

语法格式如下:(用逗号“,”连接即可)

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

实例

以下实例通过 bytitle 键来查询 菜鸟教程MongoDB 教程 的数据

db.col.find({"by":"菜鸟教程","title":"MangoDB教程").pretty()
{"_id" : ObjectId("56063f17ade2f21f36b03133"),"title" : "MongoDB 教程","description" : "MongoDB 是一个 Nosql 数据库","by" : "菜鸟教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100
}

以上实例中类似于 WHERE 语句:WHERE by='菜鸟教程' AND title='MongoDB 教程'


MongoDB OR 条件

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

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

实例

以下实例中,我们演示了查询键 by 值为 菜鸟教程 或键 title 值为 MongoDB 教程 的文档。

db.col.find({$or:[{"by":"菜鸟教程"},{"title":"MangoDB教程"}]}).pretty()
{"_id" : ObjectId("56063f17ade2f21f36b03133"),"title" : "MongoDB 教程","description" : "MongoDB 是一个 Nosql 数据库","by" : "菜鸟教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100
}

AND 和 OR 联合使用

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

db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
{"_id" : ObjectId("56063f17ade2f21f36b03133"),"title" : "MongoDB 教程","description" : "MongoDB 是一个 Nosql 数据库","by" : "菜鸟教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100
}

MangoDB插入、删除和查询文档相关推荐

  1. 魔坊APP项目-11-PyMongo、数据库连接,管理、集合管理、文档管理(添加文档、查询文档、删除文档、更新文档)

    PyMongo 安装: pip install pymongo 一.数据库连接 数据库连接,无密码 from pymongo import MongoClient# 数据库链接,必须保证当前系统能正常 ...

  2. xquery删除_XQuery实例删除SQL XML文档

    xquery删除 Delete operations over SQL XML should be possible with either erasing the XML document with ...

  3. Elasticsearch如何创建索引,添加,删除,更新文档

    文章目录 准备工作 检查 es 及 Kibana 是否运行正常 创建索引及文档 创建文档相关知识点 mulit-field 字段 关于两个type的解释 关于两个keyword的解释 mulit-fi ...

  4. 微服务11_ES:DSL/RestClient查询文档

    微服务11_ES:DSL/RestClient查询文档 一.DSL查询文档 1.DSL Query的分类 1.全文检索查询 match查询示例: multi_match查询示例: 2.精准查询 ter ...

  5. MongoDB 查询文档

    MongoDB 查询文档 语法 MongoDB 查询数据的语法格式如下: >db.COLLECTION_NAME.find() find() 方法以非结构化的方式来显示所有文档. 如果你需要以易 ...

  6. MongoDB查询文档(非常详细,不要错过哦~)

    下面是在MongoDB中查询数据的操作的详细整理,希望可以帮助到有需要的小伙伴~ 条件查询的前提条件是创建一个数据库,创建集合规则,创建文档.插入数据. 根据条件查询文档 查询大于小于(在一定数组范围 ...

  7. mongodb查询文档

    mongodb查询文档 语法:db.集合名.find({条件}) 操作符使用频率最高的: 大于: $gt > 大于等于: $gte >= 小于: l t < 小 于 等 于 : lt ...

  8. 加载pdf_Java 插入附件到PDF文档

    在文档中插入附件,可以起到与源文档配套使用的目的,以一种更简便的方式对文档起到补充说明的作用.下面将介绍通过Java编程插入附件到PDF文档中的方法.这里插入的文档可以是常见的文档类型,如Word.E ...

  9. elasticsearch查询文档数量

    查询文档数量时很常见的操作,一般可以直接使用count获取文档数,但是获取到数量信息,在[分页]应用中,意味着需要查询分页然后再查询总数. 有另一种方法,可以让我们在一次查询中获取分页数据并得到总量. ...

最新文章

  1. shell中cut-b_Shell中cut用法
  2. 【ASP.NET Web API教程】2.3.5 用Knockout.js创建动态UI
  3. 2021牛客暑期多校训练营2 L-WeChat Walk(分块)
  4. PowerDesigner 把Comment写到name中 和把name写到Comment中 pd7以后版本可用
  5. oracle如何设置权限,ORACLE的权限设置
  6. 中移M5311-NBIOT-低功耗OPENCPU开发-MQTT
  7. 锦江公司 nginx 转发
  8. 微信小程序四种父子相互传值方式
  9. JAVA浮点数浮点数转换成人民币读法
  10. Ubuntu18.04无法连接向日葵服务器的问题及解决
  11. python django基础一web框架的本质
  12. 杰控连接mysql_杰控FameView在数据库连接和查询方面的应用———FameView组态软件在数据库处理方面的...
  13. java 获取本机ip地址吗_java 获取本机ip地址
  14. 程序员被裁员失业有哪些软件众包外包平台可以接单?
  15. php curl 417,cURL简单文件上传-417预期失败
  16. sass @media
  17. “第三只眼”修炼手册
  18. 关于SQL Server 无法连接到服务器,远程过程调用失败,网络配置无项目
  19. 通常把计算机网络定义为什么?,通常把计算机网络定义为什么
  20. Mac系统 PDF转换各种文件格式安装使用教程【PDF Converter Master】

热门文章

  1. 深入浅出通信原理2021-03-07
  2. Python爬虫实战,requests+tqdm模块,爬取漫画数据(附源码)
  3. Open3d基础控件
  4. XCTF攻防世界 Normal_RSA
  5. php mysql中文乱码怎么解决_php读取mysql中文乱码怎么解决?
  6. 《构建之法》第十二章 用户体验
  7. 画架构图没有好素材可不行
  8. 软件开发过程中的QA与QC
  9. [ITIL]-ITIL4的七大指导原则
  10. 工程伦理课后习题参考答案(清华网课)