gpt4 book ai didi

MongoDB: '$redact' 结果仅匹配嵌入对象

转载 作者:可可西里 更新时间:2023-11-01 10:28:51 26 4
gpt4 key购买 nike

我有以下样式集合:

{ 
"_id" : "5548d5ebb8157a53e9ceb9a4",
"layers" : [
{ "_id" : "5548c97eb8157a53e9ceb9a0", "name" : "layer1"},
{ "_id" : "5548c97eb8157a53e9ceb9a1", "name" : "layer2"}
]
}
{
"_id" : "5548d5ebb8157a778899b9a5",
"layers" : [
{ "_id" : "5548c97eb8157a53e9ceb9a2", "name" : "layer1"},
{ "_id" : "5548c97eb8157a53e9ceb9a3", "name" : "layer2"}
]
}
...

我现在想查询具有特定 _id 的图层。我想要的是一个匹配图层对象的数组。这是我尝试过的:

db.graphs.aggregate([
{ $match: { "layers._id": { $in: ["5548c97eb8157a53e9ceb9a1"] } } },
{ $redact : { $cond:
{ if:
{ $or : [
{ $eq: ["$_id","5548c97eb8157a53e9ceb9a1"] },
{ $not : "$_id" }]
},
then: "$$DESCEND",
else: "$$PRUNE"
}
} }]);

不起作用 - 我得到一个空结果。有什么提示吗?

最佳答案

好的,我找到了解决方案,简短版:

db.test.aggregate([ 
{ $match: { "layers._id": { $in: ["5548c97eb8157a53e9ceb9a1"] } } },
{ $redact : { $cond:
{ if:
{ $or : [
{ $eq: ["$_id","5548c97eb8157a53e9ceb9a1"] },
{ $or : "$layers" }]
},
then: "$$DESCEND",
else: "$$PRUNE"
}
} }]);

说明:首先了解$redact 运算符将匹配的文档逐级向下移动,就像树/图一样。这里的问题是顶级文档已经包含一个 _id 字段。因此 { $not: "_id"} 表达式的计算结果为 false。在相同的顶层,{ $eq: ["$_id","5548c97eb8157a53e9ceb9a1"] } 表达式也是如此,因为该 id 只能在嵌套的下一层中找到。结果,顶层的计算结果为假,并且完成了“$$PRUNE”而不是“$$DESCEND”。

如果检查的级别具有 layers 属性,则提供的解决方案通过让测试为真来使顶层通过,该属性是顶层且只有顶层具有。

关于MongoDB: '$redact' 结果仅匹配嵌入对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30064624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com