我有一个像这样的文档结构:(但是有很多标记和表格)
{
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"}
]
})
但是正如我想的那样,它确实会更新数组中的每个标记。
如果有人有什么想法,
谢谢
答案 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中使用了字符串值,但是根据您的架构,它必须是数字。