【问题标题】:How to update a specific array element with Mongoose?如何使用 Mongoose 更新特定的数组元素?
【发布时间】:2014-01-31 13:41:32
【问题描述】:

我的架构如下:

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

【问题讨论】:

  • 可能只是一个错字,但GroupSchema 使用friends 而您的代码使用friend
  • 那是一个错字 - 我修正了它。同样的问题
  • 代码看起来不错,所以如果friends 的最后一个元素得到更新,那么该元素必须与您的查询匹配。
  • 它总是最后一个元素。不管我指定什么
  • 您能否更新您的问题以包含重现该问题的示例文档?

标签: node.js mongodb mongoose


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-12-14
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 2018-03-04
    相关资源
    最近更新 更多