我有一个名为 store 的集合
{
"_id": {
"$oid": "64f885a4758688440f24d070"
},
"name": "Test Location",
"Tags": [
"66249849f94df523bfb6324d",
"6624984ff94df523bfb6324e"
],
"updatedAt": {
"$date": "2024-07-23T22:30:38.454Z"
}
}
我有一个标签集合
{
"_id": {
"$oid": "66249849f94df523bfb6324d"
},
"name": "Night",
}
{
"_id": {
"$oid": "6624984ff94df523bfb6324e"
},
"name": "Bar",
}
我想将 2 个带有标签 ID 的集合加入到类似的内容中
{
"_id": {
"$oid": "64f885a4758688440f24d070"
},
"name": "Test Location",
"Tags": [
"66249849f94df523bfb6324d",
"6624984ff94df523bfb6324e"
],
"TagResult": [
{"name": "Night"},
{"name": "Bar"},
]
}
如有任何帮助,我们将不胜感激。提前致谢。
您可能尝试使用
$lookup
失败,因为这两个集合的数据类型不匹配。 (即字符串与 ObjectId)。您需要将它们转换为相同的数据类型才能执行$lookup
。
db.store.aggregate([
{
"$set": {
"Tags": {
"$map": {
"input": "$Tags",
"as": "t",
"in": {
"$toObjectId": "$$t"
}
}
}
}
},
{
"$lookup": {
"from": "tag",
"localField": "Tags",
"foreignField": "_id",
"as": "TagResult"
}
}
])
旁注:如果可能,请重构架构以将 id 存储在相同的数据类型中(即两个 ObjectId 或两个字符串),这样您就不必在运行时进行类型转换。