如何在mongodb中使用jsonpath?

Posted

技术标签:

【中文标题】如何在mongodb中使用jsonpath?【英文标题】:how to use jsonpath in mongodb? 【发布时间】:2018-03-04 18:08:34 【问题描述】:

有没有办法在 mongodb 3.4/3.6 中使用 jsonpath?示例如下所示,参考链接JSON path parent object, or equivalent MongoDB query:

 var t1 = db.runCommand(aggregate : 'news_feeds',
pipeline:[],

cursor : batchSize : 10);
     t1.cursor.firstBatch.forEach(function(doc)
   
var json = tojson(doc);
var json1="$.feeds.reviews[*].name"
var result = jsonPath(json, json1);
print(result);
  )

这个查询给出了一个jsonPath没有定义的错误,但是这个jsonpath在javascript中有

请帮忙

问候

克里斯

【问题讨论】:

该错误是因为 MongoDB shell 无法将 jsonPath 识别为函数。 MongoDB 目前不支持 jsonPath。 在 mongodb 中是否有另一种使用 jsonpath 的方法? 即使我使用 npm 安装了 json-path,并尝试执行,它说 require 未定义,请帮助 var jpath = require('json-path'); var t1 = db.runCommand(aggregate: 'news_feeds', pipeline:[], cursor: batchSize: 10); t1.cursor.firstBatch.forEach(function(doc) var json = tojson(doc); var res = jpath.resolve(json, "$.feeds.reviews[*].name") print(res); ) npm 和 MongoDB shell 是两个不同的东西。 npm 用于节点。两者之间唯一的相似之处是都使用 Javascript 作为语言。我不熟悉 jsonPath 是如何实现的,但是可能有一种方法可以在mongo shell 中执行 jsonPath 包,但 MongoDB 本身从不支持使用 jsonPath。 【参考方案1】:

通过使用 mongodb-shell-extensions https://www.npmjs.com/package/mongodb-shell-extensions#jsonpath 解决了,效果很好。

问候 克里斯

【讨论】:

【参考方案2】:

就我而言,我想更新 Mongo DB 中的一个字段,并且我拥有该字段的 JSON 路径。我最终使用了一些简单的字符串替换来完成从 JSON 路径到 mongo 查询路径的转换。

private String toMongoPath(@Nonnull String jsonPath) 
    return jsonPath.replace("'", "")
            .replace("][", ".")
            .replace("$[", "")
            .replace("]", "");

输入:

$['store']['book'][0]['title']

输出:

store.book.0.title

【讨论】:

以上是关于如何在mongodb中使用jsonpath?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 dojox.jsonPath.query 过滤/查询日期

使用JSONPath

如何过滤包含 Python 中的子字符串的 jsonpath 表达式中的 URL 列表

如何创建 Jsonpath 文件以在 redshift 中加载数据

如何访问JsonPath数组结果的值(空手道断言)

Python爬虫之JSON和JSONPath是如何正确运用的?案例详解