2016-04-05 9 views
0

にネストされたオブジェクト内の複数のフィールドの追加と削除:私はこの方法が挿入されている。このMongoDBのデータ持ってMongoDBの

db.orders.insert({ _id: ObjectId().str, name: "admin", status: "online",catalog : [ 
    { 
     "objectid" : ObjectId().str, 
     "message" : "sold", 
     "status" : "open" 
    } 
]}) 

まず、私はのようにやっているカタログオブジェクトに新しいフィールドを追加したいですこの:コードは、このエラーで失敗することを

db.orders.update({"_id":"5703b86df3d607cb5fa75ff3"},{$set: {"catalog.0.day": "tuesday"},{"catalog.0.payments": "paypal"}}); 

2016-04-05T16:48:41.757+0300 E QUERY [thread1] SyntaxError: invalid property id @(shell):1:88 

私はまた、いくつかFiを提供して削除します

db.orders.update({"_id":"5703b86df3d607cb5fa75ff3"},{$unset: {"catalog.0.day": ""},{"catalog.0.payments": ""}}); 

なぜ更新ステートメントが失敗し、追加したフィールドを削除することができますか?

答えて

1

使用して、この$setに:

db.orders.update(
    {"_id":"5703b86df3d607cb5fa75ff3"}, 
    {$set: { 
      "catalog.0.day": "tuesday", 
      "catalog.0.payments": "paypal" 
     } 
    }); 

そして、これまで$unset

db.orders.update(
    {"_id":"5703b86df3d607cb5fa75ff3"}, 
    { 
     $unset: { 
      "catalog.0.day": "", 
      "catalog.0.payments": "" 
     } 
    }); 

あなただけの1つの更新呼び出しを使用したい場合は、この操作を行うことができます。

db.orders.update(
    {"_id":"5703b86df3d607cb5fa75ff3"}, 
    { 
     $unset: { 
      "catalog.0.day": "", 
      "catalog.0.payments": "" 
     }, 
     $set: { 
      "catalog.0.day": "tuesday", 
      "catalog.0.payments": "paypal" 
     } 
    }); 

複数のレコードが必要な場合は、

db.orders.update(
    {"status":"online"}, 
    { 
     $unset: { 
      "catalog.0.day": "", 
      "catalog.0.payments": "" 
     }, 
     $set: { 
      "catalog.0.day": "tuesday", 
      "catalog.0.payments": "paypal" 
     } 
    }, 
    { 
     multi: true 
    }); 

これは、私のクエリドキュメントがより一般的なフィールドに変更されていることに注意してください。 NOT _id

+0

2つのクエリが動作します。私は100人のレコードを持つコレクションを持っていると言うことができます。 mysqlでは、フィールドiが更新されていて、特定のIDを残していれば100レコードを更新することができます。これは、100行すべてを更新することを意味します。 1つのクエリだけで100個のレコードを更新できるように、ここではmongoのような規定がありますか? –

+0

更新された回答があなたの問題を解決するかどうか確認してください。 –

+0

これはあなたの助けになります。 –

関連する問題