【问题标题】:Aggregate not working as expected in mongoose聚合在猫鼬中没有按预期工作
【发布时间】:2022-01-04 01:05:28
【问题描述】:

这是我正在使用的查找查询

  {
          $lookup: {
            from: 'weeks',
            localField: 'weeks',
            foreignField: '_id',
            as: 'weeks'
          }
   }

Result with this query

"weeks": [
                    {
                        "_id": "619e87d7b1bd6501c7aae286",
                        "name": "week-1",
                        "description": "Commodo in o.",
                        "course": "619e87d7b1bd6501c7aae281",
                        "days": [
                            "619e87dab1bd6501c7aae2a8",
                            "619e87dab1bd6501c7aae2a9",
                            "619e87dab1bd6501c7aae2aa",
                            "619e87dab1bd6501c7aae2ab",
                            "619e87dab1bd6501c7aae2ac",
                            "619e87dab1bd6501c7aae2ad"
                        ],
                        "isCopy": false,
                        "__v": 0
                    },
                    {
                        "_id": "619e87d7b1bd6501c7aae287",
                        "name": "week-2",
                        "description": "Irure e.",
                        "course": "619e87d7b1bd6501c7aae281",
                        "days": [
                            "619e87dab1bd6501c7aae2db",
                            "619e87dab1bd6501c7aae2dc",
                            "619e87dab1bd6501c7aae2dd",
                            "619e87dab1bd6501c7aae2de",
                            "619e87dab1bd6501c7aae2df",
                            "619e87dab1bd6501c7aae2e0"
                        ],
                        "isCopy": false,
                        "__v": 0
                    },]

在上面的查找中,localField 周是一个对象 ID 的数组。 当我执行此代码时,它按预期工作,但我想使用与管道相同的功能。 这是我写的代码

{
          $lookup: {
            from: "weeks",
            let: { wks: "$weeks" },
            pipeline: [
              {
                $match: {
                  _id: {
                    $in: ["$$wks"]
                  }
                }
              }
            ],
            as: "weeks"
          }
        }

Result with this query `weeks:[]`

当我运行它时,我没有得到任何输出,在我看来,原因是周数组被解释为字符串而不是对象 ID。

我现在该如何解决...

【问题讨论】:

  • 请给出一些测试数据和预期结果
  • 我添加了一个数据样本
  • 由于您使用的是$lookup,因此最好提供两个集合的示例数据。您可以使用mongoplayground 给您原来的成功查找,然后我们可以找出如何改进,同时您想在其中使用管道。
  • 嘿,我也添加了成功的查找

标签: mongodb mongoose aggregate mongoose-schema mongoose-populate


【解决方案1】:

这是你需要的吗?检查下面我的 mongoplayground,如果没有,请制作您自己的示例数据并与我分享一个新链接。

db.collection.aggregate([
  {
    $lookup: {
      from: "weeks",
      let: {
        wks: "$weeks"
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $in: [
                "$_id",
                "$$wks"
              ]
            }
          }
        }
      ],
      as: "weeks"
    }
  }
])

mongoplayground

【讨论】:

  • 不是真的,问题是你使用了相等运算符,而 $$wks 是一个数组,你不应该使用 $In 吗?
  • @KartikGupta this 怎么样@
  • mongoplayground.net/p/_2nmCXtcYur 这种情况是正确的表示,不适用于它:/
  • @KartikGupta this
  • 天哪,谢谢!!!它起作用了:)...但我仍然很困惑为什么this 不起作用
猜你喜欢
  • 2023-02-03
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 2020-03-15
  • 2017-10-17
相关资源
最近更新 更多