在mongodb 3.4.5中,请考虑以下简单集合ooo
:
{ "id" : 1, "to" : [ { "id" : 2 }, { "id" : 4, "valid" : true } ] }
如果$redact
不,请to
valid
:
db.ooo.aggregate([{ "$redact": {
"$cond": {
"if": { "$ne": [ "$valid", true] },
"then": "$$KEEP",
"else": "$$PRUNE"
}
}}])
结果:
{ "id" : 1, "to" : [ { "id" : 2 } ] }
但是当条件改为valid
为真时:
db.ooo.aggregate([{ "$redact": {
"$cond": {
"if": { "$eq": [ "$valid", true] },
"then": "$$KEEP",
"else": "$$PRUNE"
}
}}])
结果是空的。
答案 0 :(得分:0)
$redact
从顶层向下遍历整个文档,"$valid": true
部分无法在顶层传递(顶层没有valid
字段),然后是{{1} }是$$ROOT
d,没有任何回报。
解决方案(跳过这个,见下文更新):
$$PRUNE
<强>更新强>:
根据@ neil的评论,我更正了答案:
db.ooo.aggregate([{ "$redact": {
"$cond": {
"if": { $or: ["$to", {"$eq": [ "$valid", true]}] },
"then": "$$KEEP",
"else": "$$PRUNE"
}
}}])
显示预期结果:
db.ooo.aggregate([{ "$redact": {
"$cond": {
"if": { $or: ["$to", {"$eq": [ "$valid", true]}] },
"then": "$$DESCEND",
"else": "$$PRUNE"
}
}}])
这是{ "id" : 1, "to" : [ { "id" : 4, "valid" : true } ] }
被修剪。