Добавление нового поля в каждый документ в коллекции MongoDB
Как я могу добавить новое поле в каждый документ в существующей коллекции?
Я знаю, как обновить поле существующего документа, но не как добавить новое поле в каждый документ в коллекции. Как я могу сделать это в mongo
Шелл?
1 ответ:
так же, как обновление существующего поля коллекции,
$set
добавить новые поля, если указанное поле не существует.проверьте этот пример:
> db.foo.find() > db.foo.insert({"test":"a"}) > db.foo.find() { "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" } > item = db.foo.findOne() { "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" } > db.foo.update({"_id" :ObjectId("4e93037bbf6f1dd3a0a9541a") },{$set : {"new_field":1}}) > db.foo.find() { "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "new_field" : 1, "test" : "a" }
EDIT:
в случае, если вы хотите добавить new_field во всю свою коллекцию, вы должны использовать пустой селектор и установить multi flag в true (последний параметр), чтобы обновить все документы
db.your_collection.update( {}, { $set: {"new_field": 1} }, false, true )
EDIT:
в выше примера последние 2 поля
false, true
указываетupsert
иmulti
флаги.Upsert: если установлено значение true, создает новый документ, когда ни один документ не соответствует критериям запроса.
Multi: если установлено значение true, обновляет несколько документов, удовлетворяющих критериям запроса. Если установлено значение false, обновляет один документ.
это для Монго
versions
до2.2
. Для последних версий запрос изменился битdb.your_collection.update({}, {$set : {"new_field":1}}, {upsert:false, multi:true})