2017-06-02 38 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場將被更新,否則新記錄將被創建。