如何在mongodb中添加一个新的数组字段到集合?

时间:2015-06-21 01:45:16

标签: mongodb mongoose mongodb-query

例如,我有一个集合,例如User,其中包含一个字段name(以及默认的_id字段)。我在这个集合中插入了一些文档。

然后我想在此集合中添加一个字段emails(这是一个插入多个电子邮件的数组)。如果它是一个普通字段(不是一个数组),它可以通过update和$ set轻松实现。但是,使用数组,我无法使用update命令和$ upsert,$ addToSet,$ push ...创建一个新字段,因为之前没有创建过数组。

我认为这是一种常见的行为,但我找不到任何办法。

2 个答案:

答案 0 :(得分:4)

如果该字段尚未存在,则所有$set$addToSet$push运算符都将创建数组。确保您已将email添加到您的Mongoose模型架构中,以使update正常发生。

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

如果emails字段尚未存在或为空,则以下所有三个选项都会添加电子邮件数组效果相同:

var emails = ['foo@bar.com', 'bar@foo.com'];
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) {...});

答案 1 :(得分:-2)

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