猫鼬聚合 $lookup 如何根据条件更改 "from" 字段

Mongoose aggregation $lookup how to change "from" field depending on a condition

我想根据文档中的变量加入不同的 table 注意我正在使用 mongoose

$lookup: {
  from: { 
    if: { $eq: [ "$ownerType", 2 ] }, 
    then: 'hi', 
    else: 'hello' 
  },
  localField: "ownerID",
  foreignField: "_id",
  as: "members"
}

你不能,from 字段不能是变量。

您可以关注此功能的开放票证here,但它已经开放超过 4 年,所以显然它不是最优先考虑的。

我建议您对每个条件使用 $facet,如下所示:

db.collection.aggregate([
    {
        $facet: {
            cond1: [
                {
                    $match: {
                        $expr: {$ne: ["$ownerType", 2]}
                    }
                },
                {
                    $lookup: {
                        from: "hello",
                        localField: "ownerID",
                        foreignField: "_id",
                        as: "members"
                    }
                }
            ],
            cond2: [
                {
                    $match: {
                        $expr: {$eq: ["$ownerType", 2]}
                    }
                },
                {
                    $lookup: {
                        from: "hi",
                        localField: "ownerID",
                        foreignField: "_id",
                        as: "members"
                    }
                }
            ],
        }
    }
]);

$match 条件使此查询的效率接近于单个 $lookup,您可以将 $facet 阶段后的结果合并到一个数组中。