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

Mongodb query 如何使用spring数据mongodb查询mongodb文档中的json数组,mongodb-query,spring-data-mongodb,Mongodb Query,Spring Data Mongodb,我正在使用spring数据mongodb sdk查询mongodb mongoDb中的文档如下所示: { "data": { "suggestions":[ { "key": "take", "value": 1 }, { "key": "donttake", "value": 0 } ] }

我正在使用spring数据mongodb sdk查询mongodb

mongoDb中的文档如下所示:

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

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

         }
      ]
  }  
}
在我的api请求中,我有一个类似于上面的“建议”元素的结构。 我想创建一个查询条件,其中“is”子句应该是api请求中“suggestions”元素的值

我使用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”,“value”:1}]的形式进入

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


是否有其他方法可以从spring data mongo中查询和排列mongodb中的文档?

我采用了一种完全不同的方法,阅读了一些有关mongodb中查询数组的信息,这些信息可在

我使用elemMatch解决了这个问题,如下所示:

假设我的API请求映射到和对象建议,并且keyVal是存储keyVal对的对象

for (KeyVal keyVal: suggestions()){

  Criteria c = 
         Criteria.where("key").is(keyVal.key()).and("value").is(keyVal.value());
  criteria = Criteria.where("data.suggestions").elemMatch(c); 
}
然后,可以在mongo查询中使用条件


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

对于任何想找一个简单的例子来说明如何在一个数组中用外键搜索JSON对象的人来说,这个问题与回答是一针见血的+1。