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

Posted

技术标签:

【中文标题】Node.js 和 MongoDB 如果存在文档完全匹配,则忽略插入【英文标题】:Node.js and MongoDB if document exact match exists, ignore insert 【发布时间】:2014-10-30 21:29:46 【问题描述】:

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

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

【问题讨论】:

【参考方案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)

【讨论】:

【参考方案2】:

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

因此,对于uniqueValues 中的每个元素,进行find/findOne 查询,如果没有返回任何结果,则添加该元素,否则不要。

【讨论】:

这是一个明显的选择,但是执行 forEach 或循环通过可能的 500k 文档上传(大型 csv)似乎是一个可怕的选择。在这 50 万个中,可能有 2 万个我尚未从其他上传中积累的唯一值。我看过一些关于 continueOnError 标志的帖子,但我无法让它在 shell 中工作。

以上是关于Node.js 和 MongoDB 如果存在文档完全匹配,则忽略插入的主要内容,如果未能解决你的问题,请参考以下文章

Node.Js-如果在MongoDB中找不到匹配的文档,则返回1

使用 Node.js 和 MongoDB 存储密码

使用 Mongoose 的 Node.js 和 MongoDB。无法使用 findByIdAndUpdate 增加文档版本

使用 Mongoose 的 Node.js 和 MongoDB。无法使用 findByIdAndUpdate 增加文档版本

Node.js 和 MongoDB,重用 DB 对象

通过 Mongoose、Node.js、MongodB 中的特定属性查找嵌入式文档