2013-06-07 2 views
0

У меня есть MongoDB 2.2.2 и эта коллекция:Как обновить список списков в MongoDb?

> db.my_collection.find({_id: ObjectId('51b0f9b74cfe6e668c4fd8f4')}).pretty() 
{ 
    "_id" : ObjectId("51b0f9b74cfe6e668c4fd8f4"), 
    "campaigns" : [ 
     { 
      "cs_strategy_name" : "HighestPosition", 
      "name" : "DefaultCampaign", 
      "campaign_id" : 0, 
      "_syskey" : "default", 
      "en_send_warn" : "Yes", 
      "minus_keywords" : [ ], 
      "login" : "test", 
      "fio" : "test test" 
     } 
    ], 
    "domain" : "defsite.ru", 
    "login" : "test", 
    "name" : "test", 
    "password" : "", 
    "site_id" : 2, 
    "status" : "new", 
    "surname" : "test" 

Можете ли вы помочь мне найти подходящую команду для обновления: db.my_collection.campaigns.minus_keywords?
Это массив внутри другого массива.

Большое спасибо!

+0

Я спросил, и я отвечаю;) 'db.my_collection.update ({_ ID: ObjectId ('51b0f9b74cfe6e668c4fd8f4'), 'campaigns._syskey': 'default'}, {$ set: {'campaign.0.minus_keywords': ['aaa', 'bbb']}}) 'Есть ли лучший вариант? –

+0

Только некоторые предложения, вместо указания элемента массива, который нужно изменить с помощью индекса массива («campaign.0.minus_keywords»), рассмотрите возможность использования оператора позиционирования $ ('campaign. $. Minus_keywords'). Для получения дополнительной информации о операторе позиционирования см. Http://docs.mongodb.org/manual/reference/operator/positional/. Кроме того, вы можете использовать оператор $ push с $ each вместо $ set, если вы хотите добавить список/массив. http://docs.mongodb.org/manual/reference/operator/push/ – Kay

ответ

0

Для того, чтобы добавить элементы в массив в объекте MongoDB, вы можете использовать $ команду addToSet, например:

db.inventory.update(
    { _id: ObjectId('51b0f9b74cfe6e668c4fd8f4') }, 
    { $addToSet: { campaigns.minus_keywords: "accessories" } } 
) 

выше команды ($ addToSet) только добавит значение тогда и только тогда она не существует ,

Что делать, если я хочу добавить (dublicate value)? - вместо этого вы можете использовать команду $ push.

Для получения дополнительной информации о $ addToSet: http://docs.mongodb.org/v2.2/reference/operator/update/addToSet/ http://docs.mongodb.org/v2.2/reference/operator/update/push/

Смежные вопросы