如何在mongodb聚合查询中获取虚拟字段?

meh*_*tar 2 mongoose mongodb node.js mongodb-query mongoose-schema

我有一个带有一个虚拟字段的模型show

modelSchema.virtual('show').get(function () {
    return true
})
Run Code Online (Sandbox Code Playgroud)

现在,当我在 NodeJS 中使用查询时,find如下所示:

model.find({"$license_id": license_id})
Run Code Online (Sandbox Code Playgroud)

结果,我有了虚拟场show

如果我使用aggregation 这样的查询:

model.aggregate([
    {
        $match: {
            $expr: { $eq: ["$license_id", license_id] }
        }
    }
])
Run Code Online (Sandbox Code Playgroud)

结果我没有虚拟场show

如何获取aggregation查询中的虚拟字段?您有解决这个问题的想法吗?

nay*_*kam 5

您可以使用$addFields$project stage 将字段包含在聚合中。虚拟属性是不保留在数据库中的属性。您必须尝试一个函数才能获得所需的值。

model.aggregate([
    {
        $match: {
            $expr: { $eq: ["$license_id", license_id] }
        }
    },
   $addFields: {
        show: true
    }
])
Run Code Online (Sandbox Code Playgroud)