2014-01-12 63 views
0

我的模式是这样的:如何用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。我想更新符合特定条件的group中的特定friend。以下是我已经试过:

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得到更新。不是我想要的具体的一个。我究竟做错了什么?

+2

可能只是一个错字,但'GroupSchema '使用'朋友',你的代码使用'朋友'。 – JohnnyHK

+0

这是一个错字 - 我修正了它。同一问题 – Shamoon

+0

代码看起来很好,所以如果'friends'的最后一个元素得到更新,那么该元素必须与您的查询匹配。 – JohnnyHK

回答

2

为了让$在您的更新,以确定符合在查询都性质的元素,你需要在你的查询对象使用$elemMatch

groupQuery = { 
    unique_id: someId, 
    friends: {$elemMatch: {friend_id: friendNum, gender: gender}} 
} 
相关问题