MongoDB-使用子项更新父项

时间:2018-10-04 14:29:51

标签: mongodb nosql

我有一个像这样的文档结构:(但是有很多标记和表格)

{
  markers : [
    {
      id : 1,
      updateDate : 1538051924574,
      forms : [
        {
          id : 2,
          sent : false
        }
      ]
    }
  ]
}

我想将form.sent更新为true,所以我进行了以下查询:

updateOne({
}, {
  $set: {
    "markers.$[].forms.$[b].sent": true
  }
}, {
  arrayFilters: [
    {"b.id": "2"}
  ]
})

一切正常,但现在我想为每个form.sent更新markers.udpateDate。但是我无权访问marker.id,只能使用form.id。

我的问题是,我可以仅使用子访问器来更新父属性吗?

我已经尝试过这样的事情:

updateOne({
}, {
  $set: {
    "markers.$[].forms.$[b].sent": true,
    "markers.$[].updateDate": Date.now()
  }
}, {
  arrayFilters: [
    {"b.id": "2"}
  ]
})

但是正如我想的那样,它确实会更新数组中的每个标记。

如果有人有什么想法,

谢谢

1 个答案:

答案 0 :(得分:0)

只需为父级添加另一个占位符,然后使用以下新占位符将arrayFiter复制:

db['01'].updateOne({
}, {
  $set: {
    "markers.$[].forms.$[b].sent": true,
    "markers.$[dateUp].updateDate": Date.now()  <=
  }
}, {
  arrayFilters: [
    {"b.id": 2},  
    {"dateUp.forms.id":2}  <=
  ]
})

注意:您在arrayFilters中使用了字符串值,但是根据您的架构,它必须是数字。