【MongoDB】一文带你快速把握MongoDB文档插入和查询

打印 上一主题 下一主题

主题 648|帖子 648|积分 1944


前言

为了巩固所学的知识,作者实行着开始发布一些学习笔记类的博客,方便日后回首。固然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,接待读者朋友们品评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问接待大家在评论区向我提出)
   文档(document)的数据布局和 JSON 基本一样,所有存储在聚集中的数据都是 BSON 格式
  发现宝藏

前些天发现了一个巨牛的人工智能学习网站,普通易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。
一、单个文档插入

1. 语法格式

利用insert() 或 save() 方法向聚集中插入文档,语法如下:
  1. db.collection.insert(
  2.     <document or array of documents>,
  3.     {
  4.         writeConcern: <document>,
  5.         ordered: <boolean>
  6.     }
  7. )
复制代码
2. 参数

ParameterTypeDescriptiondocumentdocument or array要插入到聚集中的文档或文档数组((json格式)writeConcerndocumentOptional. A document expressing the write concern. Omit to use the default write concern.See Write Concern.Do not explicitly set the write concern for the operation if run in atransaction. To use write concern with transactions, see Transactions and Write Concern.orderedboolean可选。如果为真,则按顺序插入数组中的文档,如果其中一个文档出现错误,MongoDB将返回而不处理数组中的其余文档。如果为假,则执行无序插入,如果其中一个文档出现错误,则继续处理数组中的主文档。在版本2.6+中默认为true 3. 示例

要向comment的聚集(表)中插入一条测试数据:
  1. db.comment.insert({"articleid":"100000","content":"今天天气真好,阳光明媚","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null})
复制代码
5. 提示



  • comment聚集如果不存在,则会隐式创建
  • mongo中的数字,默认情况下是double类型,如果要存整型,必须利用函数NumberInt(整型数字),否则取出来就有问题了
  • 插入当前日期利用 new Date()
  • 插入的数据没有指定 _id ,会主动天生主键值
  • 如果某字段没值,可以赋值为null,或不写该字段
  • 执行后,如下,分析插入一个数据成功了
   WriteResult({ “nInserted” : 1 })
  

二、批量文档插入

1. 语法格式

  1. db.collection.insertMany(
  2.     [ <document 1> , <document 2>, ... ],
  3.     {
  4.         writeConcern: <document>,
  5.         ordered: <boolean>
  6.     }
  7. )
复制代码
2. 参数

ParameterTypeDescriptiondocumentdocument要插入到聚集中的文档或文档数组((json格式)writeConcerndocumentOptional. A document expressing the write concern. Omit to use the default writeconcern.Do not explicitly set the write concern for the operation if run in a transaction. Touse write concern with transactions, see Transactions and Write Concern.orderedboolean可选,一个布尔值,指定Mongod实例应执行有序插入还是无序插入。默认为true。 3. 示例

批量插入多条文章评论:
  1. db.comment.insertMany([
  2.     {"_id":"1","articleid":"100001","content":"我们不应该把清晨浪费在手机上,健康很重要,一杯温水幸福你我
  3. 他。","userid":"1002","nickname":"相忘于江湖","createdatetime":new Date("2019-08-
  4. 05T22:08:15.522Z"),"likenum":NumberInt(1000),"state":"1"},
  5.     {"_id":"2","articleid":"100001","content":"我夏天空腹喝凉开水,冬天喝温开水","userid":"1005","nickname":"伊人憔
  6. 悴","createdatetime":new Date("2019-08-05T23:58:51.485Z"),"likenum":NumberInt(888),"state":"1"},
  7.     {"_id":"3","articleid":"100001","content":"我一直喝凉开水,冬天夏天都喝。","userid":"1004","nickname":"杰克船
  8. 长","createdatetime":new Date("2019-08-06T01:05:06.321Z"),"likenum":NumberInt(666),"state":"1"},
  9.     {"_id":"4","articleid":"100001","content":"专家说不能空腹吃饭,影响健康。","userid":"1003","nickname":"凯
  10. 撒","createdatetime":new Date("2019-08-06T08:18:35.288Z"),"likenum":NumberInt(2000),"state":"1"},
  11.     {"_id":"5","articleid":"100001","content":"研究表明,刚烧开的水千万不能喝,因为烫
  12. 嘴。","userid":"1003","nickname":"凯撒","createdatetime":new Date("2019-08-
  13. 06T11:01:02.521Z"),"likenum":NumberInt(3000),"state":"1"}
  14. ]);
复制代码

4. 提示



  • 插入时指定了 _id ,则主键就是该值。
  • 如果某条数据插入失败,将会终止插入,但已经插入成功的数据不会回滚掉。
  • 因为批量插入由于数据较多轻易出现失败,因此,可以利用try catch进行异常捕捉处理,测试的时候可以不处理,如(了解):
  1. try {
  2.   ...//插入语句
  3. } catch (e) {
  4.     print (e);
  5. }
复制代码
三、文档的基本查询

1. 语法格式

查询数据的语法格式如下
   db.collection.find(<query>, [projection])
  2. 参数

ParameterTypeDescriptionquerydocument可选,利用查询运算符指定选择筛选器。若要返回聚集中的所有文档,请省略此参数或传递空文档( {} )projectiondocument可选,指定要在与查询筛选器匹配的文档中返回的字段(投影)。若要返回匹配文档中的所有字段,请省略此参数 3. 示例



  • 查询所有
如果我们要查询spit聚集的所有文档,我们输入以下命令
   db.comment.find()

db.comment.find({})
  

4. 提示



  • 我们可以发现每条文档会有一个叫_id的字段,这个相当于我们原来关系数据库中表的主键,当你在插入文档记录时没有指定该字段,MongoDB会主动创建,其类型是ObjectID类型
  • 如果我们在插入文档记录时指定该字段也可以,其类型可以是ObjectID类型,也可以是MongoDB支持的任意类型。
  • 如果我想按一定条件来查询,好比查询userid为100000的记录,只 要在find()中添加参数即可,参数也是json格式,如下:
   db.comment.find({userid:‘1003’})
  



  • 如果你只必要返回符合条件的第一条数据,我们可以利用findOne命令来实现,语法和find一样,如查询用户编号是1003的记录,但只最多返回符合条件的第一条记录:
   db.comment.findOne({userid:‘1003’})
  

4. 投影查询



  • 如果要查询效果返回部门字段,则必要利用投影查询(不表现所有字段,只表现指定的字段),如:查询效果只表现 _id、userid、nickname :
   db.comment.find({userid:“1003”},{userid:1,nickname:1,_id:0})
  



  • 默认 _id 会表现,如:查询效果只表现 、userid、nickname ,不表现 _id :
   db.comment.find({userid:“1003”},{userid:1,nickname:1,_id:0})
  



  • 再例如:查询所有数据,但只表现 _id、userid、nickname :

总结

接待各位留言交流以及品评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问接待大家在评论区向我提出)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表