我收藏了这样的文件
<script>
$(".something") th {
font - size: 2em; /* em is relative to the parent font size */
font - weight: bold;
}
</script>
现在我有一系列文档准备像这样
插入或更新到这个集合[
{ _id : ObjectId("xxxxxx") , u_id : 5 , name : "E" , comment : [1,2] },
{ _id : ObjectId("yyyyyy") , u_id : 4 , name : "D" , comment : [] },
{ _id : ObjectId("zzzzzz") , u_id : 3 , name : "C" , comment : [1,2] },
{ _id : ObjectId("aaaaaa") , u_id : 2 , name : "B" , comment : [1,2] },
{ _id : ObjectId("bbbbbb") , u_id : 1 , name : "A" , comment : [1] },
]
我可以使用var multi_document =
[
{ u_id : 8 , name : "H" , comment : [1,2] }, //Insert new document
{ u_id : 7 , name : "G" , comment : [] }, //Insert new document
{ u_id : 6 , name : "F" , comment : [1,2] }, //Insert new document
{ u_id : 5 , name : "E" , comment : [1,2,3] }, //update [1,2] to [1,2,3]
{ u_id : 4 , name : "DD" , comment : [1] }, //update D to DD and [] to [1]
{ u_id : 3 , name : "C" , comment : [1,2] }, //not do anything it same original
];
; ?如果没有,我该怎么办?
这是预期的结果:
db.collection.update(multi_document)
答案 0 :(得分:2)
执行此操作的最佳方法是使用"Bulk" API。
首先,您需要遍历multi_document
数组以及集合中的每个文档,以及具有相同u_id
的文档。为此,我们需要使用bulk.find.upsert
方法将upsert
设置为true
,然后使用.update
方法指定要更新的字段,此处comment
。在更新文档中,您需要使用$addToSet
运算符来确保评论字段和$each
修饰符中没有重复项,因为comment
是一个数组。
var bulk = db.collection.initializeOrderedBulkOp(),
count = 0;
multi_document.forEach( function (doc) {
bulk.find({ "u_id": doc.u_id })
.upsert()
.update({
"$set": { "name": doc.name },
"$addToSet": { "comment": { "$each": doc.comment }}
});
count++;
if ( count % 1000 == 0 ) {
// Execute per 1000 operations and re-init.
bulk.execute();
bulk = db.collection.initializeOrderedBulkOp();
}
})
// Clean up queues
if ( count % 1000 != 0 )
bulk.execute();
答案 1 :(得分:1)
您可以使用批量()http://docs.mongodb.org/manual/reference/method/Bulk/
使用有序操作列表,MongoDB以串行方式执行列表中的写操作。如果在处理其中一个写操作期间发生错误,MongoDB将返回而不处理列表中任何剩余的写操作。
有趣的博客关于批量API的文章:http://blog.mongodb.org/post/84922794768/mongodbs-new-bulk-api