我有两个集合:Tests
和Reports
。它们是相关的,Reports
对Test.id
进行了现场测试。每个Test
文档都有testers_count
字段。
此外,我写的查询应仅返回Tests
testers_count
大于或等于相关count
文档的Reports
。
db.test.aggregate([
{
$lookup:
{
from: 'reports',
localField: '_id',
foreignField: 'test',
as: 'reportsList'
}
},
{
$match: {
"settings.testers_count": {$gte: {$size: "$reportsList"}}
}
}
])
问题是代码不起作用,也不会返回任何错误。
答案 0 :(得分:1)
很确定你的意思是:
db.test.aggregate([
{ "$lookup": {
"from": "reports",
"localField": "_id",
"foreignField": "test",
"as": "reportsList"
}},
{ "$redact": {
"$cond": {
"if": {
"$gte": [
"$settings.testers_count",
{ "$size": "$reportsLIst" }
]
},
"then": "$$KEEP",
"else": "$$PRUNE"
}
}}
])
假设$settings.testers_count
实际上解析为“单数”属性,并且不是“数组”的成员。
其中使用$redact
而使用$gte
的“逻辑”形式进行评估。
$size
运算符也只能用于$redact
允许的评估表达式。 $match
运算符与.find()
的概念和运算符语法实际上是相同的,因为它执行“查询”,并且实际上只能使用“查询运算符”和否计算出的逻辑表达式。