我正在尝试使用 mongo 查找运算符来连接两个集合之间的数据。
我有一个名为 parks 的集合,
{
"_id": {
"$binary": {
"base64": "5y1dpNaZSEOTJiace1Ta2A==",
"subType": "04"
}
},
"parkID": "9c98c8ee-17a6-4db7-8115-c55fa470480d", //parkID = city._id, parkid is same as the cityid
}
我有另一个名为 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
如何才能成功查找?
您可能正在使用 v8.0 之前的 MongoDB 版本。因此尚不支持
$toUUID
和相关。$convert
您有 2 个选择:
$toUUID
$function
将 UUID 解析为字符串并执行$lookup
1. 升级到 MongoDB v8.0+,以便可以使用
$toUUID
这是我本地运行的结果:
2.使用
$function
将UUID解析为字符串并执行$lookup
。蒙戈游乐场