Aquí está mi esquema.
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);Si quiero encontrar un usuario específico en varios documentos, podría hacerlo
Inicio.buscar({"usuarios.email": "johnk@gmail.com"},{usuarios:1})
Esto devolvería todos los hogares con users.email = johnk@gmail.com
Pero el campo del usuario es una matriz.
"users" : [ { "status" : 0, "name" : "Yaknow", "email" : "yaknow@gmai.com", "_id" : ObjectId("5875a42ea469f40c684de385") }, { "status" : 1, "name" : "johnk", "email" : "johnk@gmail.com", "_id" : ObjectId("586e31c6ce07af6f891f80fd") } ](esto es solo de una casa, si hay muchas casas, habrá muchas matrices como esta) Entonces, la consulta anterior devolverá cada matriz de usuario de cada casa en la que el usuario tiene correo electrónico. Mi pregunta es, ¿cómo actualizo todas las instancias? de ese JohnK en JohnKirtster? Usar esto actualizaría a cada usuario en el nombre de la matriz a JohnKirster
Home.update(consulta, {users.name: "JohnKirster"})
Puede usar el operador posicional mongodb $ configurando multi:true
Home.update( {"users.name": "johnk"}, //query, you can also query for email {$set: {"users.$.name": "JohnKirster"}}, {"multi": true} //for multiple documents )