2016-10-18 8 views
1

の更新は、私は、文書のコレクション「myCollection」は、このように構成されているとしましょう.Field1とItem.Field2。ここでのMongoDBは、位置演算子で

私のクエリです:いつかフィールド値は次の応答で更新されていない

db['myCollection'].update({ 
     "_id" : BinData(3, "xxx"), 
     "Items.Field1" : ISODate("2016-05-01T00:00:00.000+0000"), 
     "Items.Field2" : BinData(3, "yyy") 
    }, 
    { 
     $set : { 
      "Items.$.Value" : NumberInt(11) 
     } 
    } 
) 

いつかそれが動作します、:

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

項目が発見されたが、変更されていませんか? ...

この場合「$」は分かりますが、配列のインデックスは正しいと思いますが、問題は「_id」基準に関するものでしょうか?

私は$ set式が間違っていると思われます:$ setが{"_id":BinData(3、 "xxx")}のドキュメントをターゲットにしているかどうかわかりませんか?

どうもありがとう

編集 修正する必要があるフィールドが既に値が設定されているためwriteResult.Modifiedが偽であると思われます。 実際には、Field1とField2の基準については、変更された項目は常に同じです:私のケースのItems.0.Value。 アイテムの配列の一部ではない最初の条件 "_id"が原因である可能性がありますか?

編集 フィールド2の基準はフィールド1 1をオーバーライドしているように私には思える:私はどちらか一方のみのを続ける場合は、それが適切に考慮されます。 しかし、もし私がそれらの両方を保っていれば、最初のものがスキップされたかのようです。

答えて

0

Ok。さらなる調査の後、私は問題を発見した:時間がかかった人のための

{ 
    "_id" : BinData(3, "xxx"), 
    "Items" : { 
     $elemMatch { 
      "Field1": ISODate("2016-05-01T00:00:00.000+0000"), 
      "Field2" : BinData(3, "yyy") 
    }} 

} 

ありがとう:

クエリー部分のようなものがある:私はので、私は私の配列キューンしている複数の基準の$ elemMatch演算子を使用する必要があります読む。これが助けてくれることを願って。

この場合、$ elemMatchを使用する必要がある理由について誰かが説明している場合は、私は非常に興味があります!

関連する問題