You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法基于二进制UUID进行MongoDB查询的问题求助

问题:聚合查询匹配二进制UUID类型_id失败

在MongoDB的models集合中,文档的_id字段存储为二进制UUID(subType为04),使用$binary语法在聚合的$match阶段匹配该_id时查询失败。

示例数据

db={
  "models": [
    {
      "_id": {
        "$binary": {
          "base64": "ksIhKC1GSleQMLeuREhjsg==",
          "subType": "04"
        }
      },
      "modelID": {
        "$binary": {
          "base64": "Am6CZhDWSRGouvb6394Nig==",
          "subType": "04"
        }
      }
    }
  ]
}

错误的查询代码

db.models.aggregate([
  {
    $match: {
      _id: {
        $eq: $binary(
          "92c22128-2d46-4a57-9030-b7ae444863b2"
        )
      },
      isDeleted: false
    }
  }])

解决方案

方法1:使用UUID()辅助函数(推荐,适用于MongoDB Shell/Compass等环境)

UUID()函数会自动将标准UUID字符串转换为subType 04的二进制对象,直接用于匹配即可:

db.models.aggregate([
  {
    $match: {
      _id: UUID("92c22128-2d46-4a57-9030-b7ae444863b2"),
      isDeleted: false
    }
  }
])

方法2:手动构造二进制匹配对象

如果环境不支持UUID()函数,可以直接使用与存储格式一致的$binary结构进行匹配:

db.models.aggregate([
  {
    $match: {
      _id: {
        "$binary": {
          "base64": "ksIhKC1GSleQMLeuREhjsg==",
          "subType": "04"
        }
      },
      isDeleted: false
    }
  }
])

原因说明

原查询中的$binary("UUID字符串")不是合法的MongoDB聚合表达式语法。在$match阶段匹配二进制类型字段时,需要传入实际的二进制对象:要么通过UUID()函数转换UUID字符串,要么直接构造与存储结构完全一致的$binary对象。

内容的提问来源于stack exchange,提问作者Varunkumar Manohar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 14:47:11