Node.js 在mongoose中按对象数组字段值更新多个文档
这是我的模式Node.js 在mongoose中按对象数组字段值更新多个文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,这是我的模式 Home = new Schema({ name: { type: String, required: true}, description: {type: String}, administrator: {type : mongoose.Schema.Types.ObjectId, ref: 'User', required: true}, users: [{ _id: {type : mongoose
Home = new Schema({
name: { type: String, required: true},
description: {type: String},
administrator: {type : mongoose.Schema.Types.ObjectId, ref: 'User', required: true},
users: [{
_id: {type : mongoose.Schema.Types.ObjectId, ref: 'User'},
email: {type: String},
name: { type: String},
status: { type: Number}
}],
rooms: [Room]
});
module.exports = mongoose.model('Home', Home);
如果我想在多个文档中找到一个特定的用户,我可以这样做
Home.find({“users.email”:”johnk@gmail.com“},{用户:1})
这将返回所有有用户的家庭。电子邮件=johnk@gmail.com
但用户字段是一个数组
"users" : [
{
"status" : 0,
"name" : "Yaknow",
"email" : "yaknow@gmai.com",
"_id" : ObjectId("5875a42ea469f40c684de385")
},
{
"status" : 1,
"name" : "johnk",
"email" : "johnk@gmail.com",
"_id" : ObjectId("586e31c6ce07af6f891f80fd")
}
]
(这只是来自一个家庭,如果有许多家庭,将有许多这样的阵列)
因此,上面的查询将返回用户有电子邮件的每个家庭的每个用户数组。
我的问题是,如何将该JohnK的所有实例更新为JohnKirtster?
使用此选项会将阵列名称中的每个用户更新为JohnKirster
update(查询,{users.name:“JohnKirster”})
您可以通过设置multi:true
Home.update(
{"users.name": "johnk"}, //query, you can also query for email
{$set: {"users.$.name": "JohnKirster"}},
{"multi": true} //for multiple documents
)
这就成功了。以前没有使用过位置运算符。虽然是一个小类型,{“multi”:true},但是是的,这解决了这个问题。如何批量更新字段?ex-users.email、users.address、users.first等。在本例中,我有一个users对象。我不想提及每个领域。我想要像{$set:{“users.$”:users}}@VikasChauhan这样的东西,您可以使用
{$set:{“users.$”:user}}
实现这一点。i、 euser
是整个用户object@JyothiBabuAraja谢谢,我也试过了,但没用。我找到了一个方法。