开发者学堂课程【MongoDB精讲课程(上):文档的插入和查询】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/726/detail/12955
文档的插入和查询
内容介绍:
一、文档的插入
二、查询
一、文档的插入
文档的插入分为单个文档插入和多个文档插入,调用的命令是 db.collection.insert
使用 insert()或 save()方法向集合中插入文档,语法如下:
db.collection.insert(
<document or array of documents>
,
{
writeConcern: <document>,
ordered: <boolean>
}
}
collection 不是固定的,而是集合的名称。之前内容讲解过如果没有集合就会隐式创建一个集合。
insert 中可以带如下参数:
Parameter |
Type |
Description |
document |
document or array |
要插入到集合中的文档或文档数组。(json 格式) |
writeConcern |
document |
Optional. 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 a transaction.To use write concern with transactions,see Transactions and Write Concern. |
ordered |
boolean |
可选。如果为真,则按顺序插入数组中的文档,如果其中—个文档出现错误,MongoDB 将返回而不处理数组中的其余文档。如果为假,则执行无序插入,如果其中一个文档出现错误,则继卖处理数组中的主文档。在版本2.6+中默认为 true |
参数中实际用到document,document 是 json 格式,存储完后为 BSON。其它两个仅作了解。writeConcern 代表插入时选择的一个包括性能和可靠性的级别。ordered 代表是否排序,插入的数据是否排序。
如果是单个插入使用 insert 或 save 都可,两者等价。
示例:
要向 comment 的集合(表)中插入一条测试数据:
db.comment.insert({"articleid" : "100000" , " content" : "
今天天气真好,阳光明媚" ,"userid": "1001 " , "nickname" : "Rose " , "createdatetime" : newDate() , "likenum " :NumberInt(10), "state" : null})
打开 cmd 窗口,直接 copy 上述代码回车,comment 在该数据库中没有,是直接插入一条文档,文档使用 json 格式。插入完成后结果显示 WriteResult({“nInserted”:1})
二、查询
插入后进行查询,查询数据的语法格式如下:
db. collection.find(<query>
,[projection])
所以输入 db. comment.find()
结果显示数据已经被插入成功。
再来输入
show collections
会发现 comment 集合也被隐式创建。
以上是单个查询,再来介绍多个查询:
多个查询不再使用 insert 语句而是 insertMany
语法:
db.collection.insertMany(
[ <document 1> , <document 2>
,...],
{
writeConcern: <document>,
ordered: <boolean>
}
}
Many 中放置类似 json 数组
示例:
批量插入多条文章评论
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"}
])
将上述代码复制到窗口
可以看到查询成功,上述查询的为一条语句,再来尝试 find,输入
db.comment.find()
结果就会显示多条数据。
db.comment.find()是查询所有。
目前 articleid 有多个,现只需要查询其中一个例如100001,也可以通过 json 格式带参数。输入
db.comment.find({articleid:
”100001”})
结果就返回 articleid 为100001的多条数据。如果只想返回第一条数据输入
db.comment.findOne({articleid:
”100001”})
结果如图
投影查询:
上述查询的字段太多,要求只显示部分字段,例如只想显示 articleid 和 userid。在关系数据库中 select 不用*用部分字段即可。MongDB 同样可以实现:在 find 时带上一些参数,在 db.comment.find({articleid:”100001”})后还可以加一个 json 格式的参数
例如输入
db.comment.find({articleid:
”100001”},{articleid:”1”}
)
代表只显示 articleid 为1的字段
显示结果如图,_id 默认显示,可以排除,再输入
db.comment.find({articleid:
”100001”},{articleid:”1”,_id:0})
强制将_id 排除,此时结果只会显示 articleid。
多个查询类似,都可以在后面添加字段。