2015-06-21 177 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

相關問題