如何在MongoDB中$unset属于另一个子文档的子文档?



我有一个包含以下格式文档的集合:

{
tokens: {
name: {
value: "...",
},
...
}
}

name可以是任何东西,并且可以有多个分配给不同键的嵌入式文档,所有这些文档都有一个value字段。

如何$unset所有具有特定value的嵌入文档?{ $unset: { "tokens.value": "test" } }不能工作,"tokens.$[].value""tokens.$.value"也不能。

可以使用流水线形式的更新,如下所示:

db.collection.update({},
[
{
"$set": {
"tokens": {
$arrayToObject: {
"$filter": {
"input": {
"$objectToArray": "$$ROOT.tokens"
},
"as": "item",
"cond": {
"$ne": [
"$$item.v.value",
"test"
]
}
}
}
}
}
}
],
{
multi: true
})

操场上链接。

在此查询中,我们执行以下操作:

  1. 使用$objectToArraytokens对象转换为数组。
  2. 我们使用$filter过滤掉嵌入文档中具有value键且值为test的数组元素。
  3. 最后,我们再次将过滤后的数组转换回object,并将其分配给tokenskey。

相关内容

最新更新