私はusers
という名前のMongoDBのコレクション内の次のデータを持っている:私はレゴのような新しい価値を持つすべてのwith
キーのペット値を交換する必要が
{
"_id" : ObjectID("5a3903562cdc59fad5fdc098"),
"name" : "Ana",
"hobbies" : [
{
"title" : "kissing",
"with" : "pets"
},
{
"title" : "playing",
"with" : "pets"
},
{
"title" : "sleeping",
"with" : "pets"
}
]
}
{
"_id" : ObjectID("5a3903a32cdc59fad5fdc099"),
"name" : "Bart",
"hobbies" : [
{
"title" : "hitting",
"with" : "pets"
},
{
"title" : "beating",
"with" : "pets"
},
{
"title" : "eating",
"with" : "pets"
}
]
}
を。次
のMongoDBのdocumentationバージョン3.6の状態:with
の各キーとして
The $[] operator can be used for queries which traverse more than one array and nested arrays.
は、私が何をする必要があるか達成すべき$[]
を使用して、2つの別々の配列の中に住んでいます。そしてMac上で、それが完璧に動作しますが、Windowsマシン上で、私はこのエラーを取得する:
cannot use the part (hobbies of hobbies.$[].with) to traverse the element
両方のマシンは、MongoDBのシェルバージョン3.6.0を実行しています。 MacのオペレーティングシステムはmacOS Sierra 10.12.6、WindowsマシンはWindows 10です。
SOは、位置演算子と私が特に得意とするエラーに関連する多くの質問があります。しかし、同じコレクションで実行された同一の操作がWindows上で失敗しても、Mac上で成功した理由については言及していません。
私は必要な結果を得るために次の2つのコマンドを試しました。どちらもMac上で動作し、上記のエラーと同じエラーでWindows上で両方とも失敗します。
db.users.updateMany({}, {$set: {"hobbies.$[].with": "legos"}});
と
db.users.update({}, {$set: {"hobbies.$[].with": "legos"}}, {multi: true});
あなたは違いhereの画面録画を見ることができます。 Windowsマシンでの録音のテキストが小さい方にあることを前もって謝罪します。
Windowsでこれを解決する方法を理解する助けがあれば、大歓迎です。
両方のオペレーティングシステムでdb.version()を実行できますか?サーバーのバージョンを確認するだけでも同じです。 – Veeram
@Veeram、 'db.version()'は両方のマシンで** 3.6.0 **を返します。 –
異なるシステムから接続するのと同じデータベースであることを確認してください。エラーは、「趣味」がないか、配列ではない「趣味」を含む文書が少なくとも1つあることを示しています。 "db.users.updateMany({hobbies:{$ type:" array "}}を試してみてください。{$ set:{" hobbies $ []。 ":" legos "}});' –