如何使用spring数据mongodb查询mongodb文档中的json数组

时间:2018-01-13 00:41:36

标签: mongodb-query spring-data-mongodb

我使用spring数据mongodb sdk来查询mongo db。

mongoDb中的文档如下所示:

{
 "data": {
     "suggestions":[
         {
            "key": "take",
             "value": 1

         },
         {
            "key": "donttake",
             "value": 0

         }
      ]
  }  
}

在我的api请求中,我的结构类似于"建议"上面的元素。 我想创建一个查询标准,其中"是"条款应该是"建议"的价值。 api请求中的元素。

我使用spring data mongo db尝试了以下代码:

JsonParser jsonParser = new JsonParser();
ObjectMapper objMapper = new ObjectMapper();
String jsonArrayString = objMapper.writeValueAsString(apirequest.getSuggestions());
JsonArray arrayFromString = jsonParser.parse(jsonArrayString).getAsJsonArray();

criteria = Criteria.where("data.suggestions").is(arrayFromString);

这段代码的问题在于,当我调试并查看使用上述条件创建的查询时,我会以$ java形式进入:[{" key":" take" ,"价值":1}]

因此,它无法与mongo文档匹配,也无法获取任何结果。

有没有其他方法可以从spring数据mongo查询mongodb中的文档和数组?

1 个答案:

答案 0 :(得分:1)

我通过阅读有关在

中可用的mongodb中查询数组的一些信息,采用了完全不同的方法

https://docs.mongodb.com/manual/tutorial/query-array-of-documents/

我使用elemMatch来解决这个问题如下:

假设我的API请求被映射到对象建议,而keyVal是存储keyVal对的对象。

tinymce.editors

然后可以在mongo Query

中使用条件

另外,请记住,elemMatch不关心数组中文档内元素的排序。这样,elemMatch很好地解决了这个问题。