2015-06-21 4 views
1

Например, у меня есть коллекция, например User, с одним полем name (и по умолчанию _id). Я вставляю некоторые документы в эту коллекцию.Как добавить новое поле массива в коллекцию в mongodb?

Затем я хочу добавить в эту коллекцию поле emails (которое представляет собой массив для вставки нескольких сообщений электронной почты). Если это нормальное поле (а не массив), он может легко справиться с update и $ set. Но с массивом я не могу создать новое поле с командой update и $ upsert, $ addToSet, $ push ... потому что массив ранее не создавался.

Я думаю, что это обычное поведение, но я не могу найти способ сделать это.

ответ

3

Все операторы $set, $addToSet и $push будут создавать массив, если поле еще не существует. Убедитесь, что вы добавили email к схеме модели Mongoose для правильного отображения update.

var userSchema = new Schema({ 
    name: String, 
    emails: [String] 
}); 

Все три из перечисленных ниже вариантов будет иметь тот же эффект, добавив массив писем, если emails поле еще не существует или пусто:

var emails = ['[email protected]', '[email protected]']; 
User.update({_id: id}, {$set: {emails: emails}}, function(err, num) {...}); 
User.update({_id: id}, {$addToSet: {emails: {$each: emails}}}, function(err, num) {...}); 
User.update({_id: id}, {$push: {emails: {$each: emails}}}, function(err, num) {...}); 
+0

Спасибо, вы меня спасете. Моя ошибка в том, что я использую $ addToSet, но я нажимаю один элемент в массив, и это не позволяет. Затем я создаю массив и использую $ set. Ура, он работает правильно. – t4nhpt

-1
db.t1.insert({name:"sachin"}) 
db.t1.insert({name:"shukla"}) 
db.t1.update({}, {$set:{arr:[]}}, {multi:true}) 
db.t1.update({}, {$push: {arr:"tmp"} }, {multi:true}) 

Example

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