【发布时间】:2021-03-27 09:12:26
【问题描述】:
我正在尝试使用 $lookup 或 graphLookup 聚合来搜索同一集合中的一些相关文档,但我想在满足条件后停止查找。 下面是我想做的一个例子:
集合中的文档示例:
{
"_id":1,
"name":"Bob",
"idNumber":"111111-1",
"conditionField": true,
"enabled": false
},
{
"_id":2,
"name":"Bob",
"idNumber":"111111-1",
"conditionField": false,
"enabled": false
},
{
"_id":3,
"name":"Bob",
"idNumber":"111111-1",
"conditionField": true,
"enabled": false
},
{
"_id":4,
"name":"Bob",
"idNumber":"111111-1",
"conditionField": true,
"enabled": false
},
{
"_id":5,
"name":"Bob",
"idNumber":"111111-1",
"conditionField": true,
"enabled": true
}
我要查询enabled字段为true的单个文档,然后按升序查找enabled为false、name和idNumberfields匹配的所有其他文档启用的文档。但是一旦找到conditionField等于false的文档,我想停止查找并忽略其余部分。
这是我现在的查询:
[
{
'$match': {
'enabled': true
}
}, {
'$lookup': {
'from': 'collection',
'let': {
'name': '$name',
'idNumber': '$idNumber'
},
'pipeline': [
{
'$match': {
'$expr': {
'$and': [
{'$eq': ['$name', '$$name']},
{'$eq': ['$idNumber', '$$idNumber'] },
{'$eq': ['$enabled', false]}
]
}
}
},
{'$sort': {'_id': -1} }
],
'as': 'relatedDocs'
}
}
]
这个查询返回像这样返回所有相关文档:
{
"_id":5,
"name":"Bob",
"idNumber":"111111-1",
"conditionField": true,
"enabled": true,
"relatedDocs":[
{
"_id":4,
"name":"Bob",
"idNumber":"111111-1",
"conditionField": true,
"enabled": false
},
{
"_id":3,
"name":"Bob",
"idNumber":"111111-1",
"conditionField": true,
"enabled": false
},
{
"_id":2,
"name":"Bob",
"idNumber":"111111-1",
"conditionField": false,
"enabled": false
},
{
"_id":1,
"name":"Bob",
"idNumber":"111111-1",
"conditionField": true,
"enabled": false
}
]
}
但我真正想要的是在找到“conditionField”等于“false”的文档后停止查找并忽略其余部分。所以我要找的结果是这样的:
{
"_id":5,
"name":"Bob",
"idNumber":"111111-1",
"conditionField": true,
"enabled": true,
"relatedDocs":[
{
"_id":4,
"name":"Bob",
"idNumber":"111111-1",
"conditionField": true,
"enabled": false
},
{
"_id":3,
"name":"Bob",
"idNumber":"111111-1",
"conditionField": true,
"enabled": false
}
]
}
【问题讨论】:
标签: mongodb mongoose aggregation-framework