0

更新コマンドのより優れた、より単純な基準を作成しようとしています。しかし、検索するキャンペーンを持つすべてのユーザーを取得する方法がわかりません。

"data" : "a name",    
"campaigns" : [     
          {     "id" : ObjectId("4ff3f07eacf4794426000154"),    "name" : "test" },
          {     "id" : ObjectId("4ff3f07eacf4794426000154"),    "name" : "fisk test2" }
    ]

私がやりたいのは、「テスト」をおそらく「OS 2012」に更新することです。

これを行うには、次のようなものを使用することを考えました。

db.users.update({"campaigns.name": "test"}, {$set : {campaigns: {'test' : 'OS 2012'}}});

その更新ステートメントの問題は、ユーザーがその配列に持っている他のキャンペーンをおそらく削除することですか? 「test」を「test2」に更新したいだけで、今すぐ見つけられる最善の方法は、最初に $pull を使用し、次に $addToSet を使用することです。

より良い方法はありますか?例を見せてもらえますか?

アドバイスとより良い知恵をありがとう。

4

1 に答える 1

1

$位置演算子について学びます。このコードは機能します。

db.users.update({'campaigns.name': 'test'}, 
                {$set: {'campaigns.$.name': 'blah blah'}})
于 2012-07-04T11:26:00.173 に答える