我有一个引用另一个文档的文档,我想连接这些文档并根据子文档中数组的内容进行过滤。
部署_machine文件。
"_id": 1, "name": "Test Machine", "machine_status": 10, "active": truemachine_status文件。
"_id": 10, "breakdown": [ "status_name": "Rollout", "state": "complete" "status_name": "Deploying", "state": "complete"我使用的是Mongo 3.6,在查找和管道方面的成功率不高,以下是我在python MongoEngine中使用的对象被传递给聚合函数。
pipeline = [
{'$match': {'breakdown': {'$elemMatch': {'status_name': 'Rollout'}}}},
{'$lookup':
'from': 'deployment_machine',
'let': {'status_id': '$_id'},
'pipeline': [
{'$match':
{'$expr':
{'$and': [
{'$eq': ['$machine_status', '$$status_id']},
'as': 'result',
{'$project': {
'breakdown': {'$filter': {
'input': '$breakdown',
'as': 'breakdown',
'cond': {'$eq': ['$$breakdown.status_name', 'Rollout']}
result = list(MachineStatus.objects.aggregate(*pipeline))
这样做效果很好,但我怎样才能排除部署机器未被激活的结果?我觉得它必须放在项目中,但找不到一个有效的条件。希望得到任何帮助。