当前位置: 首页 > 知识库问答 >
问题:

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

严玉泽
2023-03-14

mongoDb中的文档如下所示:

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

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

         }
      ]
  }  
}

在我的api请求中,我有一个类似于上面的“建议”元素的结构。我想创建一个查询条件,其中“is”子句应该是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);

共有1个答案

赵英哲
2023-03-14

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

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

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

for (KeyVal keyVal: suggestions()){

  Criteria c = 
         Criteria.where("key").is(keyVal.key()).and("value").is(keyVal.value());
  criteria = Criteria.where("data.suggestions").elemMatch(c); 
}
 类似资料:
  • 我一直在使用jmeter对mongodb进行加载测试,接下来我将使用一个具有这些数据的不同的db 我已经在这里保存了已保存的mongoHost,mongoPort,databaseName,collectionName jmeter变量 这个连接测试通过了,但我无法从数据库中获取、读取任何数据并通过测试,这是代码 错误 谢谢你

  • 主要内容:find() 方法,pretty() 方法,findOne() 方法,条件查询,AND条件语句,OR 条件语句,AND 和 OR 联合使用前面我们介绍了怎么将文档插入到集合中,本节我们来介绍一下如何从集合中查询指定的文档。 find() 方法 想要查询集合中的文档,可以使用 MongoDB 中的 find() 方法,find() 方法可以将查询结果以非结构化的方式展示出来,其语法格式如下: db.collection_name.find(query, projection) 语法说明如

  • 我试图用C#在MongoDB中用嵌套数组文档实现文本搜索功能。我有一个以下格式的MongoDB集合。

  • 我试图使用.NET驱动程序查询mongodb文档,我想在不创建类对象的情况下获取特定文档中的所有字段,因为这些文档是动态生成的,我只知道一个字段名,即,_id。如何获取整个文档 当字段已知时,这工作正常

  • 问题内容: 我是MongoDB的新手。我的样本文件是 我正在尝试更新其通知。我执行此操作的Java代码是: 它不会搜索其文件为。 问题答案: 在这种情况下,您有一个嵌套的文档。您的文档具有一个字段,该字段是一个数组,其中存储有多个子对象。要在子字段中进行搜索,您需要使用点语法: 但是,这将返回整个文档和整个数组。您可能只需要子文档。要对此进行过滤,您需要使用Collection.find的两个参数

  • 我正在SpringBootAPI中使用mongoDb进行分页搜索。 对于客户搜索路径,我正在构建一个查询,根据用户输入使用一系列条件。然后我进行计数以显示结果总数(以及计算出的关联页面数) 然后我做分页查询只返回当前页面结果 这一切工作得很好。现在在我的总结果上,我经常有相同用户的多个结果,我想显示分页列表中的那些,但我也想显示一个新的计数器,其中包含搜索中的总不同用户。 我看到了发现。不同的参数