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

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

然后我想在此集合中添加一个emails字段(这是一个数组,可插入多个电子邮件)。如果它是一个普通字段(不是一个数组),可以轻松地使用update和$set来处理。但是,由于数组尚未创建,因此不能使用update命令和$upsert,$addToSet,$push等来创建新字段。

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

2个回答

7
所有的$set$addToSet$push操作符,如果字段还不存在,将会创建数组。请确保在Mongoose模型的架构中添加了email以便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) {...});

谢谢,你救了我。我的错误是我使用了$addToSet,但我将单个项目推送到数组中,它不允许。然后我创建了一个数组并使用$set。好极了,它正常工作了。 - t4nhpt

-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} )

示例


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接