私は '$'を使ってリスト内の特定のアイテムを更新しようとしています。項目はfirstNameとlastNameの両方で決まります。このシナリオでは、firstName + lastNameの組み合わせは一意です。だからここ
は、だから私は、リスト内の項目3で強蘭の年齢を変更しようとしている私の文書
{
"_id" : ObjectId("592403125ec4f65fb02e36a0"),
"friends" : [
{
"age" : 30.0,
"fname" : "qiang",
"lname" : "he"
},
{
"age" : 31.0,
"fname" : "deng",
"lname" : "pan"
},
{
"age" : 22.0,
"fname" : "xiong",
"lname" : "lan"
},
{
"age" : 23.0,
"fname" : "qiang",
"lname" : "lan"
}
]
}
です。しかし、彼はアイテム0と私が使用するコード2項目と同じlastNameのと同じfirstNameのがあるしています
db.getCollection('test').update({'friends.fname': 'qiang', 'friends.lname': 'lan'}, {$set:{'friends.$.age': 50}})
このコードは、強蘭の年齢を変更していないが、それは50にアイテム0強彼の年齢を変更しましたこれは私の言葉のうちの一番早い試合です。したがって、この用語は実際にはANDではなくORとして扱われます。
これは、firstName + lastNameに等しいfullNameフィールドを追加し、更新時にfullNameと一致させることで解決できることがわかっています。私はちょうど把握しようとしています、目的のためにこれのように行動するように設計された '$'ですか、それとも間違って使用していますか?
ありがとうございます!
これは動作します!ありがとう! – IPE