MongoDB Create 操作笔记
Mongo shell Create 操作
- 官方文档地址:https://www.mongodb.com/docs/manual/reference/insert-methods/
- 中文文档地址:https://mongodb.net.cn/manual/reference/insert-methods/
Create 操作
- db.collection.insertOne() 将单个文档插入集合中
- db.collection.insertMany() 可以将多个文档插入一个集合中
- db.collection.insert()
- 其他写操作
- db.collection.update() 当使用[upsert: true]选项时
- db.collection.updateOne() 当使用[upsert: true]选项时
- db.collection.updateMany() 当使用[upsert: true]选项时
- db.collection.findAndModify() 当使用[upsert: true]选项时
- db.collection.findOneAndUpdate() 当使用[upsert: true]选项时
- db.collection.findOneAndReplace() 当使用[upsert: true]选项时
- db.collection.save()。
- db.collection.bulkWrite()。
1. db.collection.insertOne()
db.collection.insertOne(
<document>,
{
writeConcern: <document> # writeConcern 指定文档创建操作的安全写级别, 级别越高,写操作越安全,延时越高
}
)
> db.my_test.insertOne({name: "hua", balance: 100}) # my_test 集合如果没有创建将会自动创建
{
"acknowledged" : true, # true 表示 [acknowledged] 安全写级别被启动 (默认写级别)
"insertedId" : ObjectId("6326fa2289c04594a4b8f66f") # 写入文档的主键 _id, 创建时不指定,会自动生成
}
> db.my_test.insertOne({_id: "account1", balance: 100})
{ "acknowledged" : true, "insertedId" : "account1" }
> db.my_test.insertOne({_id: "account1", balance: 100})
WriteError({
"index" : 0,
"code" : 11000,
"errmsg" : "E11000 duplicate key error collection: test.my_test index: _id_ dup key: { _id: \"account1\" }",
"op" : { # 创建文档的内容
"_id" : "account1",
"balance" : 100
}
})
2. db.collection.insertMany()
db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
# ordered 可选的。一个布尔值,指定mongod实例应执行有序插入还是无序插入。默认为true。
#
}
)
注意:
- 当 ordered=true 顺序插入时,其中某一条出错,就会终止插入行为,剩余的文档无论正确与否,都不会被写入
- 当 ordered=false 无序插入时,其中某一条出错,不会终止插入行为,将所有正确的文档全部插入,错误的会返回错误信息
示例:详见官方文档
3. insertOne、insertMany、insert 的区别:
- 返回结果不一样
- insertOne、insertMany 不支持 db.collection.explain() 命令
- insert 支持 db.collection.explain() 命令
4. db.collection.save() 命令
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
- 该save()方法使用 insert或update命令
- 如果文档不不包含_id字段,那么 save()方法调用的 insert()方法。在操作过程中, mongoshell将创建一个ObjectId并将其分配给该_id字段。
- 如果文档包含_id字段,则该 save()方法等效于将upsert选项设置为true且_id字段上的查询谓词的更新。
5. 文档主键
默认文档主键 objectId
> ObjectId()
ObjectId("6327064d89c04594a4b8f674")
> ObjectId("6327064d89c04594a4b8f674")
ObjectId("6327064d89c04594a4b8f674")
> ObjectId("6327064d89c04594a4b8f674").getTimestamp() # 获取objectId的创建时间
ISODate("2021-09-18T11:51:41Z")
复合主键(使用文档作为文档主键)
# 1. 写入复合主键文档
> db.accounts.insert(
{
_id:{accoountNo: "001", type: "savings"},
name: "irene",
balance: 80
}
)
WriteResult({ "nInserted" : 1 })
# 2. 重复写入主键重复报错
> db.accounts.insert(
{
_id:{accoountNo: "001", type: "savings"},
name: "irene",
balance: 80
}
)
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "E11000 duplicate key error collection: test.accounts index: _id_ dup key: { _id: { accoountNo: \"001\", type: \"savings\" } }"
}
})
# 3. 主键文档交换位置,可以重复写入
> db.accounts.insert(
{
_id:{type: "savings", accoountNo: "001"},
name: "irene",
balance: 80
}
)
WriteResult({ "nInserted" : 1 })
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)