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

How to add a new array field to collection in mongodb?

例如,我有一个集合,例如 User,其中有一个字段 name(默认为 _id 字段)。我向这个集合中插入了一些文档。

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

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

如果该字段尚不存在,则所有 $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) {...});
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