我的架构如下:
var FriendSchema = new Schema({
friend_id: String,
gender: String,
meta: {
address: String,
amount: Number
}
}, { _id : false });
var GroupSchema = new Schema({
unique_id: {
type: Number,
required: true,
unique: true
},
friends: [FriendSchema]
});
因此Group
包含friends
数组,而friend
包含meta
,其中包含一些信息。我想更新符合特定条件的friend
中的特定group
。这是我尝试过的:
groupQuery = {unique_id: someId, 'friends.friend_id': friendNum, 'friends.gender': gender}
groupUpdate = {$set: {'friends.$.meta.address': myAddress, 'friends.$.meta.amount': debt}}
Group.update groupQuery, groupUpdate, (err) ->
组中的最后一个friend
会更新。不是我想要的特定的。我做错了什么?
答案 0 :(得分:2)
要让更新中的$
标识与查询中两个属性匹配的元素,您需要在查询对象中使用$elemMatch
:
groupQuery = {
unique_id: someId,
friends: {$elemMatch: {friend_id: friendNum, gender: gender}}
}