2017-06-02 83 views
0

我创建了一个名为集合账户。MongoDB的UPSERT在命令的NodeJS

在第一枪,我将围绕5条记录。

{"Id":"0012800000C6Q19AAF","Name":"Aditya Kumar"} 
{"Id":"0012800000C6MldAAF","Name":"GenePoint"} 
{"Id":"0012800000C6MlbAAF","Name":"United Oil & Gas, UK"} 
{"Id":"0012800000C6MlcAAF","Name":"United Oil & Gas, Singapore"} 
{"Id":"0012800000C6MlTAAV","Name":"Edge Communications"} 
{"Id":"0012800000C6MlUAAV","Name":"Burlington Textiles Corp of America"} 

我从外部系统带来数据,它已经有一个ID字段与它关联。当收到请求时,用于插入额外的5个记录下次再

,我要检查,如果即将到来的记录ID字段我MongoDB中已经存在(如果是的话,做一个更新其他插件)。

而且不要被标识字段从与每个MongoDB的文档创建_id场外部系统来混淆。

这是我曾尝试:

var x= fields["data"]; obj='Account'; 
db.createCollection(obj); 

db.collection(obj).insert(fields, function(err, doc) { 
    if (err) { 
    handleError(res, err.message, "Failed to create new contact."); 
    } else { 
    res.status(201).json(doc.ops[0]); 
    } 
}) 
+1

你试过了什么?在核心文档和这个网站上有很多upsert操作的例子。如何做到这一点,你不了解什么? –

+0

我浏览过这个。首先,我明白如果已经存在的记录(来源),我应该有一套。然后即将到来的记录(目标)。但不知道在哪里我应该使用一个查询,我只想在我的id字段的基础上插入和更新。 collection.update(源,目标,{UPSERT:真},功能(ERR,结果,upserted){ ... }); – Ajeet

+0

是的,作为该方法的调用签名,但不一定代表您的实际代码。你是如何在上下文中使用它的?什么是错误/问题?请使用您的问题上的[编辑](https://stackoverflow.com/posts/44321183/edit)链接添加详细信息,而不是发表评论。 –

回答

0

使用updateOne方法:

db.collection.updateOne(
    { _id: id }, 
    { $set: { name: 'name' } }, 
    { upsert: true } 
); 

如果发现匹配id记录,则name场将被更新,否则新记录将被创建。