gpt4 book ai didi

java - MongoDB:分组后获取具有最大版本ID的条目

转载 作者:行者123 更新时间:2023-12-02 03:52:46 25 4
gpt4 key购买 nike

我对 MongoDB 相当陌生,我正在尝试创建一个查询,我认为该查询非常简单(好吧,至少使用 SQL 它会)但是我无法完成它。

因此,有一个集合患者,在此集合中,使用id 属性来标识单个患者(不是 mongodbs _id!!) 单个患者可以有多个版本,他的版本由 meta.versionId 确定 字段。

为了查询所有“患者的当前版本”,我需要为具有特定id的每个患者获取具有最大versionId<的患者.

到目前为止我已经得到了这个:

    AggregateIterable<Document> allPatients = db.getCollection("patients").aggregate(Arrays.asList(
new Document("$group", new Document("_id", "$id")
.append("max", new Document("$max", "$meta.versionId")))));

allPatients.forEach(new Block<Document>() {
@Override
public void apply(final Document document) {
System.out.println(document.toJson());
}
});

这会产生以下输出(使用我非常有限的测试数据):

{“_id”:“2.25.260185450267055504591276882440338245053”,“最大”:“5”}
{“_id”:“2.25.260185450267055504591276882441338245099”,“最大”:“0”}

到目前为止似乎有效,但我需要获取整个患者集合。现在我只知道对于id:2.25.260185450267055504591276882440338245053最大版本是“5”等等。当然,我现在可以为每个条目创建一个自己的查询,并从 mongodb 顺序获取特定 id/versionId-组合的每个 patent 文档但这似乎是一个糟糕的解决方案!还有其他方法可以完成吗?

最佳答案

如果您知道要检索的列,例如患者姓名、地址等,我想您可以将这些列附加到值为 1 的文档中。

AggregateIterable<Document> allPatients = db.getCollection("patients").aggregate(Arrays.asList(
new Document("$group", new Document("_id", "$id")
.append("max", new Document("$max", "$meta.versionId")).append("name",1).append("address",1))));

关于java - MongoDB:分组后获取具有最大版本ID的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35743651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com