【问题标题】:Issue in Updating an Array Object in mongoDb在 mongoDb 中更新数组对象的问题
【发布时间】:2014-07-06 23:28:20
【问题描述】:

我正在尝试根据条件更新 Array 对象。以下是我的场景:-

我想将状态从当前更新为存档。

我已经尝试了好几个小时,但仍然没有运气。像这样:-

db.user.update({
    'injury._id': ObjectId("5374cb4d1e0386c02800006a"),
    'injury.injurydata.locationaddressinjury': {
        $elemMatch: {
            'status': 'current'
        }
    }
}, {
    $set: {
        'injury.injurydata.locationaddressinjury.status': 'archive'
    }
})

【问题讨论】:

  • 请注意您的代码格式。而且除了图片之外的代码示例也会更容易阅读。
  • 完全相同的屏幕截图用于几天前询问this question。您的代码示例不同,但问题仍然基本相同。

标签: mongodb mongoose


【解决方案1】:

图片使您难以阅读数据的结构。但我猜你正在寻找的更新是这样的:

db.user.update({
    'injury._id': ObjectId("5374cb4d1e0386c02800006a"),
    'injury.injurydata.locationaddressinjury': {
        $elemMatch: {
            'status': 'current'
        }
    }
}, {
    $set: {
        'injury.injurydata.locationaddressinjury.$.status': 'archive'
    }
});

$ 将引用您找到的元素。如果您正在寻找一种方法来一次更新所有元素。恐怕 $elemMatch 只会匹配满足您条件的第一个元素。

【讨论】:

  • 嵌套数组,匹配找到的第一个数组。因此,如果匹配是内部数组中的第二个元素但顶级数组是第一个元素,那么匹配的索引仍然是 0 而不是 1 所要求的。任何发生这种情况的情况都只是运气不好。
猜你喜欢
  • 2017-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多