2017-12-19 12 views
0

私は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でこれを解決する方法を理解する助けがあれば、大歓迎です。

+1

両方のオペレーティングシステムでdb.version()を実行できますか?サーバーのバージョンを確認するだけでも同じです。 – Veeram

+0

@Veeram、 'db.version()'は両方のマシンで** 3.6.0 **を返します。 –

+0

異なるシステムから接続するのと同じデータベースであることを確認してください。エラーは、「趣味」がないか、配列ではない「趣味」を含む文書が少なくとも1つあることを示しています。 "db.users.updateMany({hobbies:{$ type:" array "}}を試してみてください。{$ set:{" hobbies $ []。 ":" legos "}});' –

答えて

0

同じ問題があまりにもLinux上に存在する代わりに、{}

+0

そうですが、テキストが小さすぎるので見にくいですが、 '{}'ではなく '()'です。しかし、探してくれてありがとう。 –

0

の)私が言うことができないが、Windows上で、それはあなたが(持っているクエリのように見えます。私はUbuntuの16.04使用してい

、3.6.1

後MongoDBは後に出力されます$ []

を実行する
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 0 } 

PS:私はコメントを追加するのに十分な評判を持っていませんしたがって、ここに投稿してください

関連する問題