首页 > 解决方案 > 猫鼬检查任何地图条目值中是否存在文本

问题描述

我们需要将翻译放在 JSON 对象中的 Map 中。当我们搜索一个项目时,我们只会传递名称,我们需要检查该名称是否在一个翻译对象中。

例子:

"item" : {
  "name" : {
     "en_US": "Hello"
     "id_ID" : "Halo"
  }
}

客户端只会发送,name但我们不知道使用的语言(例如,Halo),我们需要以name任何语言返回文档。我们应该如何定义过滤器对象?到目前为止,我看到的所有示例都要求我们定义要过滤的完整对象信息(例如:)item.name.id_ID

标签: javascriptnode.jsmongodbmongoose

解决方案


操场

 db.collection.aggregate([
  {
    "$addFields": {//reshape it to match on value field
      "field": {
        "$objectToArray": "$item.name"
      }
    }
  },
  {//reshape again to get the only matching element
    "$unwind": "$field"
  },
  {
    $match: {//match condition
      "field.v": "Hello"
    }
  },
  {
    $project: {//project only what is needed
      "field.k": 1,
      "item": 1
    }
  }
])

推荐阅读