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


前言

为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

文档(document)的数据结构和 JSON 基本一样,所有存储在集合中的数据都是 BSON 格式

发现宝藏

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

一、单个文档插入

1. 语法格式

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

db.collection.insert(
    <document or array of documents>,
    {
        writeConcern: <document>,
        ordered: <boolean>
    }
)

2. 参数

ParameterTypeDescription
documentdocument 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的集合(表)中插入一条测试数据:

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. 语法格式

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

2. 参数

ParameterTypeDescription
documentdocument要插入到集合中的文档或文档数组((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. 示例

批量插入多条文章评论:

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

在这里插入图片描述

4. 提示

  • 插入时指定了 _id ,则主键就是该值。
  • 如果某条数据插入失败,将会终止插入,但已经插入成功的数据不会回滚掉。
  • 因为批量插入由于数据较多容易出现失败,因此,可以使用try catch进行异常捕捉处理,测试的时候可以不处理,如(了解):
try {
  ...//插入语句
} catch (e) {
    print (e);
}

三、文档的基本查询

1. 语法格式

查询数据的语法格式如下

db.collection.find(<query>, [projection])

2. 参数

ParameterTypeDescription
querydocument可选,使用查询运算符指定选择筛选器。若要返回集合中的所有文档,请省略此参数或传递空文档( {} )
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 :

在这里插入图片描述

总结

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

  • 155
    点赞
  • 139
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 144
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 144
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东离与糖宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值