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

相关问题