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

t4n*_*hpt 3 mongoose mongodb mongodb-query

例如,我有一个User具有一个字段name(和默认_id字段)的集合,例如。我将一些文档插入此集合。

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

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

Joh*_*yHK 5

所有的$set$addToSet$push运营商将创建数组如果该字段不存在。确保已添加email到Mongoose模型的架构中,以update使正确发生。

var userSchema = new Schema({
    name: String,
    emails: [String]
});
Run Code Online (Sandbox Code Playgroud)

如果该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) {...});
Run Code Online (Sandbox Code Playgroud)