按字段名称搜索正则表达式

Pra*_*uel 3 mongodb

是否有内置方法在MongoDB数据库中使用正则表达式搜索字段名称?该文档列出了一个$ regex字段来搜索字段值.

Nei*_*unn 5

您可以使用JavaScript对$where子句的评估在任意深度执行此操作:

db.collection.find(
  function () {
    var findKey = new RegExp("^start");

    function inspectObj(doc) {
      return Object.keys(doc).some(function(key) {
        if ( typeof(doc[key]) == "object" ) {
          return inspectObj(doc[key]);
        } else {
          return findKey.test(key);
        }
      });
    }
    return inspectObj(this);
  }
)
Run Code Online (Sandbox Code Playgroud)

或者,如果你有MongoDB 3.4并且只查看文档的"顶层"级别,你可以使用.aggregate()$objectToArray:

 db.collection.aggregate([
  { "$addFields": {
     "finder": { "$objectToArray": "$$ROOT" }
  }},
  { "$match": { "finder.k": /^start/ }  }
 ])
Run Code Online (Sandbox Code Playgroud)

这是因为$objectToArray需要一个"对象"和转换成对象的数组连键"k""v"用于每个所提供的对象的"键"和"值".我们可以使用这个来完成整个文档$$ROOT.因此,我们基本上将"密钥"转换为可以搜索的"数据".

通过转换数据,您可以使用简单的"点表示法"和常规$regex查询表达式来匹配"键"的值.

因此,聚合方法最适用于"平面"文档,或处理"已知深度",并且JavaScript方法最适用于可以在任何级别嵌套密钥的情况.


归因于:如何在任意深度找到 JavaScript版本搜索的基本部分的MongoDB字段名称.仅针对正则表达式进行了修改.