3
ここは私のスキーマです。オブジェクトの配列で複数のドキュメントを更新する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": "[email protected]"}行うことができ、{ユーザーを:1})
これはusers.email = [email protected]
しかし、ユーザーのフィールドが配列であると、すべての家庭を返します。
"users" : [
{
"status" : 0,
"name" : "Yaknow",
"email" : "[email protected]",
"_id" : ObjectId("5875a42ea469f40c684de385")
},
{
"status" : 1,
"name" : "johnk",
"email" : "[email protected]",
"_id" : ObjectId("586e31c6ce07af6f891f80fd")
}
]
は、したがって、上記のクエリは、ユーザーがメールを持って各家の各ユーザーの配列を返します(多くの家庭がある場合、これがこのように多くの配列となり、わずか1家からである)。 マイ質問は、JohnKirtsterのすべてのインスタンスをJohnKirtsterに更新するにはどうすればよいですか? JohnKirster
Home.updateに、配列の名前のすべてのユーザーを更新してしまう、これを使用して (クエリは、{users.name: "JohnKirsterは、"})
これはトリックです。前に位置演算子を使用していない。小さな型ですが、{"multi":true}ですが、これが解決します。 – TradeRaider