例如,我有一个集合,例如User
,其中包含一个字段name
(以及默认的_id
字段)。我在这个集合中插入了一些文档。
然后我想在此集合中添加一个字段emails
(这是一个插入多个电子邮件的数组)。如果它是一个普通字段(不是一个数组),它可以通过update
和$ set轻松实现。但是,使用数组,我无法使用update
命令和$ upsert,$ addToSet,$ push ...创建一个新字段,因为之前没有创建过数组。
我认为这是一种常见的行为,但我找不到任何办法。
答案 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} )