代码之家  ›  专栏  ›  技术社区  ›  Siddharth Trikha

MongoDB上的jsonPath查询?

  •  8
  • Siddharth Trikha  · 技术社区  · 7 年前

    我们有 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"
            },
            ........
          ]
        }
    

    鉴于,Mongoquery同样是:

    db.inventory.find( { salary: { $gt: 10000 } })
    

    我们的应用程序代码是用Java编写的,它连接到MongoDB。

    有什么方法可以直接运行这个jsonpath查询到mongodb吗?是吗?

    使用mongo查询意味着将jsonpath查询转换为mongo query,这在代码中很麻烦。一个非常暴力的方法是让所有用户首先使用as(应用程序),然后转换 List<Document> 转到json字符串,然后运行jsonpath查询。

    任何帮助都将不胜感激。

    1 回复  |  直到 7 年前
        1
  •  2
  •   dnickless    7 年前

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

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

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

    基于regex和解析(特别是mongodb): https://github.com/gabrielelana/mongodb-shell-extensions/blob/master/src/jsonpath.js

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