我正在维护一组具有伴随集合的唯一值,该集合具有这些值的实例。我这样做的原因是伴侣集合具有> 1000万条记录,其中唯一值集合仅加起来达到100K并且我在整个地方使用这些值并进行部分匹配查找。
当我上传csv文件时,我一次插入伴随集合中的记录通常是10k到500k。仅将尚未存在的值插入唯一值集合的最佳方法是什么?
示例:
//Insert large quantities of objects into mongo
var bulkInsert = [
{
name: "Some Name",
other: "zxy",
properties: "abc"
},
{
name: "Some Name",
other: "zxy",
properties: "abc"
},
{
name: "Other Name",
other: "zxy",
properties: "abc"
}]
//Need to insert only values that do not already exist in mongo unique values collection
var uniqueValues = [
{
name:"Some Name"
},
{
name:"Other Name"
}
]
修改 我尝试在字段上创建一个唯一索引,但是一旦它在我插入的文档数组中找到一个副本,它就会停止整个过程并且不会在中断后检查任何值。
答案 0 :(得分:1)
想出来。如果从shell执行此操作,则需要使用Bulk()并创建如下的插入作业:
var bulk = db.collection.initializeUnorderedBulkOp();
bulk.insert( { name: "1234567890a"} );
bulk.insert( { name: "1234567890b"} );
bulk.insert( { name: "1234567890"} );
bulk.execute();
并且在节点中,continueOnError
标志适用于直线collection.insert()
collection.insert( [{name:"1234567890a"},{name:"1234567890c"}],{continueOnError:true}, function(err, doc){}
答案 1 :(得分:0)
好吧,如果我理解你的问题,我认为这里的解决方案非常简单。 由于该过程在找到重复字段时停止,因此您应该在尝试添加之前检查该值是否已经存在。
因此,对于uniqueValues
中的每个元素,创建 find / findOne 查询,如果它没有返回任何结果,则添加元素,否则不要