繁体   English   中英

Spring MongoDB 在结果中仅获取值而不是键:值

[英]Spring MongoDB getting only values instead of key:value in result

您好,所以我试图从 mongoDB 获取 ID 列表,编写此代码返回 id:value 的 map 我只是希望它只返回值。

        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]

是的,我知道我可以像这样操纵结果以获得所需的结果,但我想知道是否有可能直接从数据库获得相同的结果,而不是像这样

        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 文档 抱歉插入图片,如果不可读就无法复制。

您不能使用 Mongodb 来做到这一点。 该数据库是面向文档的,这意味着给定一个标准(在本例中为一个 id),您将获得一个满足标准的文档列表,其中每个文档都有一些属性和一些值。

为了使它更容易,您可以重写您的代码,以便您可以 map 将您的结果转换为仅包含您想要的 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(查询,Result.class,"Company3"));

也许不同的可能会有所帮助。 https://docs.mongodb.com/manual/reference/method/db.collection.distinct/

也许你可以尝试这样的事情?

    List<Map<String,String>> list = (List<Map<String, String>>) mongoTemplate.findOne(query, Map.class,"Company3").get("recordList");
    List<String> idList=(List<Map<String, String>>) mongoTemplate.distinct("id",query,options);
    

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM