繁体   English   中英

Node.js和MongoDB(如果存在文档完全匹配),请忽略插入

[英]Node.js and MongoDB if document exact match exists, ignore insert

我正在维护一个唯一值的集合,该唯一值具有一个伴随集合,其中包含那些值的实例。 之所以这样,是因为伴随集合具有超过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"
        }
    ]

编辑我尝试在该字段上创建唯一索引,但是一旦它在我要插入的文档数组中找到重复项,它就会停止整个过程,并且在中断后不会继续检查任何值。

弄清楚了。 如果您是从外壳执行此操作,则需要使用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){}

好吧,如果我正确理解您的问题,我认为这里的解决方案非常简单。 由于当发现重复字段时该过程已停止,因此在尝试添加该值之前,基本上应该检查该值是否不存在。

因此,对于uniqueValues每个元素,进行一次find / findOne查询,如果它不返回任何结果,则添加该元素,否则不添加。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM