【问题标题】:Mongoose aggregation $lookup how to change "from" field depending on a conditionMongoose 聚合 $lookup 如何根据条件更改“来自”字段
【发布时间】:2021-01-25 21:10:19
【问题描述】:

我想根据文档中的变量加入不同的表 注意我使用猫鼬

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

【问题讨论】:

  • 需要细节或清晰

标签: javascript mongodb mongoose lookup aggregation


【解决方案1】:

你不能,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 阶段之后的结果合并到一个数组中即可。

【讨论】:

  • Mongodb 不会在 $facet 阶段使用索引键。如果我们编写 2 个单独的查询会很快
猜你喜欢
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 2019-11-08
  • 2020-11-02
  • 2021-12-01
  • 1970-01-01
  • 2021-02-22
  • 2017-04-23
相关资源
最近更新 更多