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、 e
user
是整个用户object@JyothiBabuAraja谢谢,我也试过了,但没用。我找到了一个方法。