如何使用Mongoose更新特定的数组元素?

时间:2014-01-12 21:42:08

标签: node.js mongodb mongoose

我的架构如下:

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会更新。不是我想要的特定的。我做错了什么?

1 个答案:

答案 0 :(得分:2)

要让更新中的$标识与查询中两个属性匹配的元素,您需要在查询对象中使用$elemMatch

groupQuery = {
    unique_id: someId, 
    friends: {$elemMatch: {friend_id: friendNum, gender: gender}}
}