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

MongoDB能否将空字符串识别为属性名?该如何查询对应嵌套字段?

解决方案

MongoDB 原生的点查询语法不支持直接引用空字符串作为字段名,你之前的两种写法要么不符合语法规则触发报错,要么无法正确匹配到字段返回空结果。

可以使用聚合管道配合$getField操作符实现查询需求,$getField支持传入空字符串作为字段名提取对应值,和你原本distinct需求等价的查询语句如下:

db.isover_projects.aggregate([
  // 提取vnut_okraj_podmienky下空字符串键对应的对象
  {
    $project: {
      empty_key_data: { $getField: { field: "", input: "$vnut_okraj_podmienky" } }
    }
  },
  // 提取目标字段值
  {
    $project: {
      target_value: "$empty_key_data.nestand_teplota.value",
      _id: 0
    }
  },
  // 对值去重,和distinct效果一致
  {
    $group: {
      _id: "$target_value"
    }
  }
])

返回结果中的_id字段就是去重后的目标字段值。

如果你需要查询对应值等于24的文档,也可以用$expr配合$getField实现:

db.isover_projects.find({
  $expr: {
    $eq: [
      { $getField: { field: "value", input: { $getField: { field: "nestand_teplota", input: { $getField: { field: "", input: "$vnut_okraj_podmienky" } } } } },
      "24"
    ]
  }
})

如果你使用的是MongoDB 5.0以下的版本,不支持$getField操作符,可以用$objectToArray转对象为数组后过滤查询,写法如下:

db.isover_projects.aggregate([
  {
    $project: {
      vnut_arr: { $objectToArray: "$vnut_okraj_podmienky" }
    }
  },
  {
    $unwind: "$vnut_arr"
  },
  // 匹配键名为空字符串的项
  {
    $match: {
      "vnut_arr.k": ""
    }
  },
  // 提取目标值去重
  {
    $group: {
      _id: "$vnut_arr.v.nestand_teplota.value"
    }
  }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:36:05