Spring MongoDB 在结果中只获取值而不是 key:value
Posted
技术标签:
【中文标题】Spring MongoDB 在结果中只获取值而不是 key:value【英文标题】:Spring MongoDB getting only values instead of key:value in result 【发布时间】:2022-01-14 12:33:03 【问题描述】:你好,所以我想从 mongoDB 获取 ID 列表,编写了返回 id:value 映射的代码,我只是希望它只返回值。
query=new Query(Criteria.where("_id").is("47b3b1ab-2d80-42cf-b289-e3d45497b59f"));
query.fields().include("recordList.id").exclude("_id");
System.out.println( mongoTemplate.findOne(query, Map.class,"Company3"));
recordList=[id=rec4vCGPy3EnXRuCM, id=recAivYlqtDzZP62C, id=recbcLfxuLLB6Jjn0, id=reckIA8RdQtDUKCYI, id=rectnZZzBJ2iKN8eO]
但我需要这样的东西
[rec4vCGPy3EnXRuCM, recAivYlqtDzZP62C, recbcLfxuLLB6Jjn0, reckIA8RdQtDUKCYI, rectnZZzBJ2iKN8eO]
是的,我知道我可以像这样操纵结果以获得所需的结果,但我想知道是否可以直接从 DB 获得相同的结果,而不是像这样
List<Map<String,String>> list = (List<Map<String, String>>) mongoTemplate.findOne(query, Map.class,"Company3").get("recordList");
List<String> idList=new ArrayList<>();
for (Map<String, String> stringStringMap : list)
idList.add(stringStringMap.get("id"));
这就是我的数据的样子 mongodb document。抱歉插入图片,如果不可读就无法复制。
【问题讨论】:
【参考方案1】:你不能使用 Mongodb 做到这一点。这个数据库是面向文档的,这意味着给定一个标准(在本例中是一个 id),您将获得一个满足标准的文档列表,其中每个文档都有一些属性和一些值。
为了更简单,您可以重写代码,以便将结果映射到仅包含您想要的 id 列表且没有键的 pojo。
类似于以下内容:
public class Result
private List<String> ids;
// getters and setters here
@override
public String toString()
return ids.toString();
现在您检索数据的存储库方法将如下所示:
query = new Query(Criteria.where("_id").is("47b3b1ab-2d80-42cf-b289-e3d45497b59f"));
// 不需要这个 //query.fields().include("recordList.id").exclude("_id");
System.out.println(mongoTemplate.findOne(query, Result.class,"Company3"));
【讨论】:
这个帖子的解决方案回答了你的帖子,谢谢! 太好了,我学到了一些新东西:)。没问题!【参考方案2】:也许 distinct 会有所帮助。 https://docs.mongodb.com/manual/reference/method/db.collection.distinct/
Query query=new Query(Criteria.where("_id").is("adfe377d-6e5b-48f0-b5bb-12b09f57285d"));
System.out.println(mongoTemplate.findDistinct(query,"recordList.id","Company4",String.class));
【讨论】:
@NikolozLatsabidze - 将更新答案!很高兴我能够以某种方式提供帮助。 您的回答肯定帮了大忙,找不到单一的解决方案。谢谢。【参考方案3】:oblivion02 的解决方案有点错误,但绝对暗示了我正确的方向,谢谢。
Query query=new Query(Criteria.where("_id").is("adfe377d-6e5b-48f0-b5bb-12b09f57285d"));
System.out.println(mongoTemplate.findDistinct(query,"recordList.id","Company4",String.class));
仅这两行就为我提供了一个非常干净的 id 值列表
[rec4vCGPy3EnXRuCM, recAivYlqtDzZP62C, recbcLfxuLLB6Jjn0, reckIA8RdQtDUKCYI]
【讨论】:
以上是关于Spring MongoDB 在结果中只获取值而不是 key:value的主要内容,如果未能解决你的问题,请参考以下文章
在spring boot中仅获取值而不是JSON响应中的键和值