我有查询:

 Model.aggregate([{
        $lookup: {
            from: 'translations',
            localField: '_id',
            foreignField: 'item_id',
            as: 'translation'
        },
    }, {
        $project: {
            "label": "$label",
            "items": "$items",
            "translation": {
                "$filter": {
                    "input": "$translation",
                    "as": "page",
                    "cond": {
                        "$eq": ["$$page.lang_key", lang]
                    }
                }
            }
        }
    }])


结果:

[ { _id: 58b2ca5b9ac42bac7aaed48a,
    label: 'Main',
    items: [ [Object] ],
    translation: [ [Object] ] } ]


如何使translation字段不是数组?
因为我总是在数组中只收到一个元素...

最佳答案

由于只在数组中接收一个元素,因此可以使用$unwind$arrayElemAt展平数组并生成一个子文档。对于后者,应使用以下类似的方法:

Model.aggregate([
    {
        "$lookup": {
            "from": "translations",
            "localField": "_id",
            "foreignField": "item_id",
            "as": "translation"
        }
    },
    {
        "$project": {
            "label": 1, "items": 1,
            "translation": {
                "$arrayElemAt": [
                    {
                        "$filter": {
                            "input": "$translation",
                            "as": "page",
                            "cond": { "$eq": ["$$page.lang_key", lang] }
                        }
                    },
                    0
                ]
            }
        }
    }
])

10-07 12:53
查看更多