2017-12-29 15 views
1

の配列の値があります。の配列の値の一部が既にデータベースに存在している可能性があります。私はupsert新しい値とを増やすには、古い値のを増やしてください。これを行うための 一つの方法は次のとおりです。updateコマンドおよびインクリメント回数を使用してデータベースに存在するすべての値のmongoDBに複数の文書をアップする

  • db.test.update({ link: {$in: ["A", "B"]}}, {$inc: {count: 1}}, {upsert: true, multi:true})

  • 私のデータベースに存在しないすべての値については、それぞれの値をチェックしてデータベースにアップカウントしてください。

2番目の手順でネットワークに負荷がかかる可能性があります。 1つのコマンドで2番目のステップを実行する方法はありますか?私のデータベースの

初期状態:

{ "_id" : ObjectId("5a45f97f84527190e1f28cb7"), "link" : "A", "count" : 3 } 

、私は次のように配列を持っている:const values = ['A', 'B', 'C']

は今、私のようなものを持ちたい、このを検討たとえば

これは:

{"_id": ObjectId("abc"), "link": "A", "count" : 4}, 
{"_id": ObjectId("xyz"), "link": "B", "count" : 1}, 
{"_id": ObjectId("fgh"), "link": "C", "count" : 1} 
+0

あなたが言及している第二のステップは、1つのコマンドだけで更新クエリでtrueにアップサート有効にすることによってで行われ、そうではありませんか?あなたの質問を理解できません – divine

+0

@divineすべての値について、それがデータベースに存在するかどうかをチェックする必要があります。そうでない場合は、その値を新しい文書として挿入する必要があります。しかし、挿入したいドキュメントがたくさんあるので、 'insertMany()'のようなものがあれば、配列からすべての値をアップアップすると思っていました。 私が与えた例を参照してください。 –

+0

@divine 2番目のステップでは、 'update()'コマンドを使用すると、**単一のクエリ**が必要となり、ドキュメントにすでに存在する多くのドキュメントを更新するか、または1つを挿入します。私が欲しいのは、データベース内の存在に応じて、多くの文書を挿入したいということです(存在する場合は増分カウント、それ以外の場合は挿入します)。 –

答えて

1

find()メソッドを使用してDBでルックアップを実行することができます(前述のとおり)。

DBに配列の値が存在しない場合、find()は空のオブジェクトを返します。したがって、オブジェクトの長さはfind()から返されます。空白が見つかった場合は、DBに挿入して、情報を更新してください。 nodejs環境のため

例コード:

var db = mongojs('dbname', ['collection_name']); 

var theLink = 'XYZ'; 

db.collection_name.find({link: theLink}, function (err, obj) { 
    if (err) 
     throw err; 
    if (obj.length == 0) 
     // write logic to insert 
    else 
     // write logic to update 
}); 
関連する問題