MongoDB上的JSONPath查询?

Sid*_*kha 8 json mongodb jsonpath mongodb-query

我们将User数据存储到MongoDB中.客户端提供JSONPath查询以请求过滤的用户集.

例如:

$.users[@.salary > 10000]

是一个JSONPath查询,用于检索工资大于10000的用户.

数据:

   "users": [ {
      "firstName": "John",
      "lastName" : "doe",
      "age"      : 26,
      "salary"   : 5000, 
      "address"  : {
        "streetAddress": "naist street",
        "city"         : "Nara",
        "postalCode"   : "630-0192"
      },
      "phoneNumbers": [
        {
          "type"  : "iPhone",
          "number": "0123-4567-8888"
        },
        {
          "type"  : "home",
          "number": "0123-4567-8910"
        },
        ........
      ]
    }
Run Code Online (Sandbox Code Playgroud)

然而,同样的MongoQuery将是:

db.inventory.find( { salary: { $gt: 10000 } })
Run Code Online (Sandbox Code Playgroud)

我们的Java应用程序代码连接到MongoDB.

有没有什么办法可以直接运行这个JSONPath查询到MongoDB?

使用Mongo查询意味着将JSONPath查询转换为MongoQuery,这将在代码中进行繁琐的翻译.一个非常强力的方法是让所有用户首先在AS(应用程序)上,然后转换List<Document>为Json字符串,然后运行JSONPath查询.

任何帮助,将不胜感激.

dni*_*ess 2

在此阶段无法开箱即用 - 请参阅此开放请求:https ://jira.mongodb.org/browse/SERVER-736

我个人建议您采用某种翻译方法 - 这是我看到的唯一可行的选择,除了无法扩展的强力客户端评估(但对于小数据集可能非常好)。另外,翻译查询所需的代码可以很好地进行单元测试,因此它应该是一个相当安全的选择。

以下是关于从何处获取/基于所需翻译代码的一些想法。

基于正则表达式和解析(特别是 MongoDB):https://github.com/gabrielelana/mongodb-shell-extensions/blob/master/src/jsonpath.js

或者,这也许可以用于将 JSONPath 字符串解析为对象模型,然后您可以将其转换为 MongoDB 查询:https://github.com/json-path/JsonPath