Mongodb使用$ filter和嵌套数组

时间:2019-11-13 09:47:38

标签: mongodb mongoose aggregation-framework

我有这份文件

[

    {
        "id" : 1,
        "prices" : [
            {
                "value": 50,
                "term": [
                    {
                        "term_value" : 6
                    },
                    {
                        "term_value" : 12
                    }
                ]
            },
            {
                "value": 100,
                "term": [
                    {
                        "term_value" : 18
                    }
                ]
            }
        ]
    },
    {
        "id" : 2,
        "prices" : [
            {
                "value": 50,
                "term": [
                    {
                        "term_value" : 6
                    },
                    {
                        "term_value" : 18
                    }
                ]
            },
            {
                "value": 150,
                "term": [
                    {
                        "term_value" : 24
                    }
                ]
            }
        ]
    }
]

我想使用聚合框架来获取至少具有一个prices.term.value等于6的文档

我正在使用这个

Product.aggregate(
    [
        { "$match": { "prices.term.value": {"$eq": 6} } },
    ]
)

它返回所有文档,因为所有文档中至少有一个满足条件,并且没有问题

我需要的是,使用$ filter返回至少具有一个条件的价格

这是我需要的伪代码

{
    "$addFields": {
        "prices": {
            "$filter": {
                "input": "$prices",
                "as": "field0",
                "cond": {
                    "$eq": [
                        "$$field0.term.term_value",
                        6
                    ]
                }
            }
        }
    }
}

但是没有任何建议吗?

我需要的结果是

[

    {
        "id" : 1,
        "prices" : [
            {
                "value": 50,
                "term": [
                    {
                        "term_value" : 6
                    },
                    {
                        "term_value" : 12
                    }
                ]
            },
        ]
    },
    {
        "id" : 2,
        "prices" : [
            {
                "value": 50,
                "term": [
                    {
                        "term_value" : 6
                    },
                    {
                        "term_value" : 18
                    }
                ]
            },
        ]
    }
]

谢谢

0 个答案:

没有答案