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

MongoDB中如何按指定语言返回嵌套对象的目标响应结构?

MongoDB 根据语言参数提取嵌套字段并重组结构

直接用detail.EN:1的投影方式会保留detail下的EN子层级,无法直接得到你需要的结构,以下是两种可行的解决方案:

方法1:聚合管道 + $getField(MongoDB 4.4+ 推荐)

假设传入的语言参数为lang(如"EN"或"HI"),使用聚合查询将指定语言的内容直接替换到detail字段:

db.collection.aggregate([
  {
    $project: {
      _id: 1, // 保留需要的其他字段,不需要则设为0
      detail: { $getField: { field: lang, input: "$detail" } }
    }
  }
])

执行后detail字段会直接返回对应语言的title、jobDescription等属性,完全匹配你要的响应结构。

方法2:兼容低版本MongoDB的写法

如果你的MongoDB版本低于4.4,可通过对象转数组的方式实现:

db.collection.aggregate([
  {
    $addFields: {
      tempDetail: {
        $arrayElemAt: [
          { $objectToArray: "$detail" },
          { $indexOfArray: [ { $objectToArray: "$detail" }, { k: lang } ] }
        ]
      }
    }
  },
  {
    $project: {
      _id: 1,
      detail: "$tempDetail.v",
      tempDetail: 0 // 清理临时字段
    }
  }
])

驱动程序中使用示例(以Node.js为例)

将语言参数作为变量传入即可:

const targetLang = "EN"; // 传入的语言参数
const queryResult = await db.collection.aggregate([
  { $project: { _id: 1, detail: { $getField: { field: targetLang, input: "$detail" } } } }
]).toArray();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:21:03