2016-04-18 5 views
1

Я пытаюсь обновить некоторое поле в своей коллекции в зависимости от состояния.Обновление MongoDB с условием

Я хочу, чтобы установить поле active в true если условие true и false иначе

Это обновление без условия

db.consent.update(
{}, //match all 
{ 
    $set: { 
     "active": true 
    } 
}, 
{ 
    multi: true, 
} 

) 

Я хотел бы добавить условие для обновления, как это:

db.consent.update(
{}, 
$cond: { 
    if: { 

     $eq: ["_id", ObjectId("5714ce0a4514ef3ef68677fd")] 

    }, 
    then: { 
     $set: { 
      "active": true 
     } 
    }, 
    else: { 
     $set: { 
      "active": false 
     } 
    } 
}, 
{ 
    multi: true, 
} 

)

В соответствии с https://docs.mongodb.org/manual/reference/operator/update-field/ оператора $cond нет.

Каковы мои возможности для выполнения этого обновления в виде одной команды?

+0

Возможный дубликат [MongoDB, условных upserts или обновлений] (http://stackoverflow.com/questions/5540103/mongodb- условные-upserts-or-updates) – BanksySan

ответ

1

Вы не можете.

Mongo не поддерживает сопоставление полей, условных выражений и т. Д. В инструкции по обновлению.

+0

Есть ли обходной путь для этого? – q99

+0

Не знаю, что я знаю, просто нужно сделать два вызова обновления. Один для правды, один для фальши. – BanksySan

3

Вы можете обновить MongoDB документ условно с помощью findAndModify() или findOneAndUpdate(), если у вас есть MongoDB версия 3.2+

+0

Из документации 'Команда findAndModify модифицирует и возвращает один документ'. Так что это было бы полезно только для одного документа, но мне нужно обновить всю коллекцию. Поэтому я думаю, что я в основном застрял в: 1) Согласование двух фаз 2) 2 вопроса 3) Другой документ, который будет содержать информацию об этом 4) Измените реализацию – q99

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