MongoDB学习笔记06-MongoDB在Shell中执行增
添加集合并插入一个文档
db.集合名.insert({...})
> db.person.insert({"name":"zhang","age":15})
WriteResult({ "nInserted" : 1 })
>
注意:MongoDB
会自动为该文档加入一个_id
的key,但是如果要插入的文档中已经包含了_id
的key
,则不会再自动添加了
以上执行insert
时候传入的是一个对象,那么传入的是一个对象数组
呢?如下图:如果插入时传入的是一个对象数组,那么会为该对象数组中的每一个对象插入一个文档。
> db.person.insert([{"name":"zhang","age":15},{"name":"wang","age":22}])
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
> db.person.find()
{ "_id" : ObjectId("556bf3da361be67b8f01af25"), "name" : "zhang", "age" : 15 }
{ "_id" : ObjectId("556bf3da361be67b8f01af26"), "name" : "wang", "age" : 22 }
>
如果采用save
方法遇到已经存在的_id
,则不会报错,它其实是把已经存在的_id
的那个文档进行更新;当然,如果要插入的文档的_id
值还不存在,则插入新文档
> db.person.find()
{ "_id" : 1002, "name" : "zhang", "age" : 15 }
> db.person.save({"_id":1002,"name":"wang","age":30})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.person.find()
{ "_id" : 1002, "name" : "wang", "age" : 30 }
>
插入文档数组
定义变量 mydocuments
用于保存待插入的文档数组。
> var mydocuments =
[
{
item: "ABC2",
details: { model: "14Q3", manufacturer: "M1 Corporation"},
stock: [ { size: "M", qty: 50 } ],
category: "clothing"
},
{
item: "MNO2",
details: { model: "14Q3", manufacturer: "ABC Company" },
stock: [ { size: "S", qty: 5 }, { size: "M", qty: 5 }, { size: "L",
qty: 1 } ],
category: "clothing"
},
{
item: "IJK2",
details: { model: "14Q2", manufacturer: "M5 Corporation"},
stock: [ { size: "S", qty: 5 }, { size: "L", qty: 1 } ],
category: "houseware"
}
];
传递数组 mydocuments
到方法 db.collection.insert()
执行批量插入。
db.inventory.insert( mydocuments );
该方法返回包含操作状态的 BulkWriteResult
对象。若插入成功将返回如下对象:
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
用 Bulk 插入多个文档
3.2 版本提供了db.collection.bulkWrite 进行批量操作
2.6 新版功能
MongoDB提供一个用于执行批量写入的 Bulk()
API。以下操作步骤描述了如何使用 Bulk()
API向MongoDB
集合中插入一组文档。
初始化一个操作构建器 Bulk
给集合 inventory
初始化一个操作构建器 Bulk
。
var bulk = db.inventory.initializeUnorderedBulkOp();
该操作返回一个无序的操作构建器,维护了所有待执行的操作列表。无序操作意味着MongoDB
能够以平行方式执行,也可以用非确定性顺序的方式执行列表中的操作。如果当执行其中一个写操作时出现错误,MongoDB
将继续执行列表中其他剩余的写操作。
你也可初始化一个有序的操作构建器;详见 db.collection.initializeOrderedBulkOp()。
向 bulk 对象中添加插入操作
使用 Bulk.insert()
方法向 bulk
对象中添加两个插入操作。
bulk.insert(
{
item: "BE10",
details: { model: "14Q2", manufacturer: "XYZ Company" },
stock: [ { size: "L", qty: 5 } ],
category: "clothing"
}
);
bulk.insert(
{
item: "ZYT1",
details: { model: "14Q1", manufacturer: "ABC Company" },
stock: [ { size: "S", qty: 5 }, { size: "M", qty: 5 } ],
category: "houseware"
}
);
向 bulk 对象中添加查询修改删除操作
bulk.find( { status: "D" } ).remove(); # 还有 removeOne() 操作
bulk.find( { status: "P" } ).update( { $set: { comment: "Pending" } } );
bulk.find( { item: "abc123" } ).replaceOne( { item: "abc123", status: "P", points: 100 } ); # _id还在不变
bulk.find( { item: "abc123" } ).upsert().replaceOne( { item: "abc123", status: "P", points: 100 } ); # 如果没找到那么进行插入操作,
# 后面可以跟的操作 Bulk.find.replaceOne(),Bulk.find.updateOne(),Bulk.find.update()
Bulk.getOperations()
循环插入1500条数据,同样可以进行Update
,Remove
操作
var bulk = db.items.initializeUnorderedBulkOp();
for (var i = 1; i <= 1500; i++) {
bulk.insert( { x: i } );
}
bulk.execute();
bulk.getOperations();
执行批量操作
调用 bulk
对象的 execute()
方法以执行 bulk
对象列表中的所有操作。
bulk.execute();
该方法返回包含操作状态的 BulkWriteResult 对象。若插入成功将返回如下对象:
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
3.2 版本后还有以下几种语法可用于插入文档
db.collection.insertOne()
:向指定集合中插入一条文档数据db.collection.insertMany()
:向指定集合中插入多条文档数据
# 插入单条数据
> var document = db.collection.insertOne({"a": 3})
> document
{
"acknowledged" : true,
"insertedId" : ObjectId("571a218011a82a1d94c02333")
}
# 插入多条数据
> var res = db.collection.insertMany([{"b": 3}, {'c': 4}])
> res
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("571a22a911a82a1d94c02337"),
ObjectId("571a22a911a82a1d94c02338")
]
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com
文章标题:MongoDB学习笔记06-MongoDB在Shell中执行增
文章字数:1.2k
本文作者:Bin
发布时间:2017-07-17, 16:21:38
最后更新:2019-08-06, 00:07:35
原始链接:http://coolview.github.io/2017/07/17/MongoDB/MongoDB%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B006-MongoDB%E5%9C%A8Shell%E4%B8%AD%E6%89%A7%E8%A1%8C%E5%A2%9E/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。