如何使用字符串对象 ID mongodb 数组连接 2 个集合

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

我有一个名为 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"},
  ] 
}

如有任何帮助,我们将不胜感激。提前致谢。

mongodb
1个回答
0
投票

您可能尝试使用

$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 或两个字符串),这样您就不必在运行时进行类型转换。

© www.soinside.com 2019 - 2024. All rights reserved.