MongoDB 字符串和 UUID 之间的查找连接

问题描述 投票:0回答:1

我正在尝试使用 mongo 查找运算符来连接两个集合之间的数据。

我有一个名为“公园寻找”的集合

{
  "_id": {
    "$binary": {
      "base64": "5y1dpNaZSEOTJiace1Ta2A==",
      "subType": "04"
    }
  },
  "parkID": "9c98c8ee-17a6-4db7-8115-c55fa470480d",
}

我还有另一个名为 city 的集合

{
  "_id": {
    "$binary": {
      "base64": "nJjI7hemTbeBFcVfpHBIDQ==",
      "subType": "04"
    }
  },
  "name": "Bellaire",
  }

我对公园集合的查找聚合操作如下所示

[
  {
    $match: {
      isDeleted: false,
      _id: {
        $eq: UUID(
          "e72d5da4-d699-4843-9326-269c7b54dad8"
        )
      }
    }
  },
  {
    $lookup: {
      from: "city",
      localField: "parkID",
      let: { parkIdStr: { $toString: "$parkID" } },
      foreignField: "_id",
      pipeline: [
        {
          $match: {
            $expr: {
              $eq: ["$$parkIdStr", "$_id"]
            }
          }
        }
      ],
      as: "city_park_details"
    }
  }
]

尽管数据有效,但 city_park_details 是一个空数组

发生这种情况是因为park.parkID是一个字符串,而city._id是一个UUID

如何成功查找?

mongodb
1个回答
0
投票

$lookup
阶段,您不应使用
localField
foreignField
,因为这将执行公园和城市集合之间的连接,并且由于两种数据类型不相同,因此您将不会在
city_park_details
数组。

pipeline
$match
阶段,需要先将
_id
字段转换为String,然后再匹配文档。

{
  from: "city",
  let: {
    parkIdStr: {
      $toString: "$parkID"
    }
  },
  pipeline: [{
    $match: {
      $expr: {
        $eq: ["$$parkIdStr", { $toString: "$_id" }]
      }
    }
  }],
  as: "city_park_details"
}
© www.soinside.com 2019 - 2024. All rights reserved.