在 MongoDB 中使用动态字段名称进行搜索

Searching with dynamic field name in MongoDB

我的情况是 Mongo 数据库中的记录如下:

{
"_id" : "xxxx",
"_class" : "xxxx",
"orgId" : xxx,
"targetKeyToOrgIdMap" : {
    "46784_56139542ecaa34c13ba9e314" : 46784,
    "47530_562f1bc5fc1c1831d38d1900" : 47530,
    "700004280_56c18369fc1cde1e2a017afc" : 700004280


   },
}

我必须找出 targetKeyToOrgIdMap 的子节点具有一组特定值的记录。这意味着,我知道 "46784_56139542ecaa34c13ba9e314" : 46784 部分的记录中的值是多少。并且字段名称是可变的,它是值和一些随机字符串的组合。

在上面的例子中,我有 46784,我需要找到在相应字段中包含 46784 的所有记录。

有没有什么方法可以激发一些正则表达式或类似的东西,或者通过使用任何其他方法,我可以在字段 targetKeyToOrgIdMap 的子节点中获得具有我需要的值的记录。

提前致谢

您可以像这样使用 MongoDB 的 $where

db.myCollection.find( { $where: function() { 
  for (var key in obj.targetKeyToOrgIdMap) {
    if (obj.targetKeyToOrgIdMap[key] == 46784){
      return true;
    }
  }
}}).each { obj ->
  println obj
}

但请注意,这将需要对每个文档执行该功能的完整 table 扫描。参见 documentation