2015-09-24 2 views
1

Я пытаюсь вставить поле в каждый документ коллекции, если это поле не существует раньше. Для этого я пытаюсь:Как вставить поле во все документы, если оно не существует

db.people.update(
    { city.postcode: "" }, 
    { 
     city.postcode: "W1" 
    }, 
    { multi: true } 
) 

Но к сожалению, к сожалению, это не работает; любой намек, пожалуйста?

UPDATE:

Документация здесь: http://docs.mongodb.org/manual/reference/method/db.collection.update/

ответ

3

У вас не хватает $set здесь:

Если вы хотите обновить запись, если city.postcode": "" то используйте следующий запрос:

db.collection.update({ "city.postcode: "" }, {$set:{ "city.postcode": "W1"}}, { multi: true, upsert: true }) 

Если вы хотите обновить запись, если city.postcode" не существует, то используйте следующий запрос:

db.collection.update({ "city.postcode": {$exist:false} }, {$set:{ "city.postcode": "W1"}}, { multi: true, upsert: true }) 
+0

Этот файл работает: db.order.update ( {$ and: [{'city.postcode': {$ exists: false}}]}, {$ set: {'city.postcode': 'W1'} }, {multi: true}) Он очень похож на ваш, так что я думаю, что ваш тоже работает, и я буду отмечать его как правильный. Однако я разбиваю еще одну коллекцию (я ошибочно выполнил этот запрос над ними). ​​Вы знаете, как я могу ее вернуть? –

+0

@stackpepe вы не можете вернуть его, если он обновлен. Но вы можете снова обновить его, чтобы удалить ранее обновленное поле. Если обновленная коллекция ранее не содержала 'city.pincode', то просто [$ unset] (https://docs.mongodb.org/manual/reference/operator/update/unset/) поле' city.postcode' – Vishwas

+0

Также вы делаете не нужно '$ и' в запросе выше. – Vishwas

1

Попробуйте это:

db.people.update(
    { city.postcode: {$exists: false} }, 
    { city.postcode: "W1"}, 
    { multi: true, upsert: true } 
) 
+0

Большое спасибо за подсказку, но он не работает –

+1

Прежде всего, попробуйте сделать 'db.people.find ({city.postcode: {$ exists: false}})', чтобы увидеть, выбраны ли записи. Если вы думаете, что ваш запрос не получает никакой записи. –

0

@stackpepe Попробуйте этот запрос, чтобы обновить все документы,

db.people.update({},{ $set: { city.postcode: "W1" },{ multi: true } }) 
Смежные вопросы