具有多个条件的Mongo 3.6聚合查找

时间:2017-12-15 10:49:17

标签: mongodb mongodb-query aggregation-framework lookup aggregation

假设我的Mongo数据库只有一个集合data。在这个集合中,我有以下文件:

{
    "type": "person",
    "value": {
        "id": 1,
        "name": "Person 1",
        "age": 10
    }
},
{
    "type": "person",
    "value": {
        "id": 2,
        "name": "Person 2",
        "age": 20
    }
},
{
    "type": "prescription",
    "value": {
        "drug": "Bromhexine",
        "patient": 2
    }
},
{
    "type": "prescription",
    "value": {
        "drug": "Aspirin",
        "patient": 1
    }
}

根据这些记录,我想在"type": person"type": prescriptionvalue.id = value.patient的文档之间加入。

我已经尝试了以下阶段的聚合:

{
    "$match": {
        "type": "person"
    }
},
{
    "$lookup": {
        "from": "data",
        "let": { "patient": "$value.id"},
        "pipeline": [
            {
                "$match": {
                    "$expr": {
                        "type": "prescription",
                        "value.patient": "$$patient"
                    }
                }
            }
        ],
        "as": "prescription"
    }
}

但它会产生错误FieldPath field names may not contain '.'。我相信这是由于"let": { "patient": "$value.id"},行。如果我尝试双美元符号($$)(如here所示),结果是错误Use of undefined variable: value

我知道如何进行这种聚合吗?

1 个答案:

答案 0 :(得分:2)

使用$lookup阶段

中的以下管道对象完成
"pipeline": [
                { "$match":
                    { "$expr":
                        { "$and":
                            [
                                { "$eq": [ "$type", "prescription" ] },
                                { "$eq": [ "$value.patient",  "$$patient" ] }
                            ]
                        }
                    }
                }
            ]