2017-05-24 11 views
0
{ 
    "_id" : ObjectId("5925e2213daf48359cb5429e"), 
    "email" : "[email protected]", 
    "firstname" : "test3", 
    "friends" : [ 
     { 
      "friend_email" : "[email protected]", 
      "status" : 1, 
      "fname" : "test2" 
     }, 
     { 
      "friend_email" : "[email protected]", 
      "status" : 1, 
      "fname" : "test1" 
     } 
    ] 
} 

私のデータベースは上記のようです。 「友人」は、その中に多数のエントリを持つことができます。 friend_email = "[email protected]"とemail = "[email protected]"で特定の項目(変数値に応じて)を検索し、その特定の項目 "status"を0に変更する必要があります。 ネストされたドキュメントの更新MongoDB

collection_temp.update({ 

     "email": email([email protected]) ,  
     "friends" : 
     {$elemMatch : 
       {"friend_email" : friend_req_sent_to ([email protected])} 
     }}, 
     {"$set": 
       {"friends.$.status" : 0} 
    }, 

    function(err, result) { 
     if (result) { 
      console.log("SUCCESS"); 

     } else { 
      console.log("FAIL"); 
     } 
    }); 

クエリは正しく実行されますが、ステータスフィールドは変更されません....どこが間違っているのか教えてください。

+0

クエリを別々に実行してから、それぞれの関数を呼び出せますか?そう簡単に? –

+0

奇妙な私はあなたのクエリの簡単なテストを行い、それは正常に働いた。プロパティ "status"の値が変更されていないことをどのように確認していますか?あなたのコレクション名をチェックしてください。一つはdbに書かれているものとは違うコードに書かれています。 –

+0

@JayNirgudkar誰かがあなたの問題を解決しましたか?もしそうなら、あなたは最高の答えを受け入れてください(ポイントの下にあるチェックマークをクリックしてください)。それはあなたの質問に出くわす他のユーザーがすぐに受け入れられた答えを見つけるのを助け、15人の担当者も与えます。著者に指摘する(: – Danziger

答えて

1

クエリが正常に動作しています。使用している関数(emailおよびfriend_req_sent_to)から間違った値が返されている可能性があります。実行中の1に設定されているすべてのstatusフィールド、と

db.test.update({ 
    email: "[email protected]", 
    friends: { $elemMatch: { friend_email: "[email protected]" } } 
}, { $set: { "friends.$.status": 0 } }) 

戻り値:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 

そして、私はfindをチェックすると、私は文書が適切に更新されました見ることができます。

関連する問題