我使用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中的文档和数组?
答案 0 :(得分:1)
我通过阅读有关在
中可用的mongodb中查询数组的一些信息,采用了完全不同的方法https://docs.mongodb.com/manual/tutorial/query-array-of-documents/
我使用elemMatch来解决这个问题如下:
假设我的API请求被映射到对象建议,而keyVal是存储keyVal对的对象。
tinymce.editors
然后可以在mongo Query
中使用条件另外,请记住,elemMatch不关心数组中文档内元素的排序。这样,elemMatch很好地解决了这个问题。