2017-06-02 8 views
0

私はAccountという名前のコレクションを作成しました。nodejsのMongodb upsertコマンド

最初のショットでは、約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に存在するかどうかチェックしたいと思います。

そして、外部システムからのIdフィールドは混乱しないようにしてください。すべてのMongoDBドキュメントに対して_Idフィールドが作成されています。ここで

は、私が試したものです:一致idを持つレコードが見つかった場合、その後nameフィールドは新しいそうでない場合、更新されます

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

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

何を試しましたか?コア・ドキュメントとこのサイトには、アップサンプリング操作の多くの例があります。これをどうやって行うのか分からないのですか? –

+0

これを閲覧しました。まず、既存のレコード(ソース)があればセットがあるはずであることを理解しました。次回のレコード(ターゲット)。しかし、自分のidフィールドに基づいて挿入して更新するだけのようなクエリをどこで使うべきかはわかりません。 collection.update(source、target、{upsert:true}、function(err、result、upserted){ ... }); – Ajeet

+0

はい、メソッドのコールシグネチャとして使用できますが、必ずしも実際のコードを表す必要はありません。実際にどのように文脈でそれを実際に使用していますか?エラー/問題は何ですか?コメントを投稿するのではなく、[編集](https://stackoverflow.com/posts/44321183/edit)リンクを使用して詳細を追加してください。 –

答えて

0

updateOneメソッドを使用しますレコードが作成されます。