panache和mongodb-find-distinct

ryoqjall  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(381)

我有一个属性为“标签”数组的文档。现在我要查询所有不同的标记项。

{ 
  "name": "test1",
  "tags": ["tag1","tag2", "tag3"]
},
{
  "name": "test2",
  "tags": ["tag1"]
}

mongo shell解决方案:

db.ApiModel.distinct("tags")

这给了我:

["tag1", "tag2", "tag3"]

但如何才能达到同样的效果与华丽?PanachemengoEntity不提供特定的distinct方法。我也不知道如何使用 find 方法来实现我的目标,或者如果有可能使用这种方法。
我所能想到的就是找到所有 find("tags", "*") (是*通配符吗?)然后在java中处理重复项,但我认为这不是预期的用途。

m528fe3b

m528fe3b1#

您可以使用这两种方法中的任何一种来获得不同的结果 tags 从收藏中 test .

public List<String> getDistinctTags() {
        return Tags
                .<Tags>mongoCollection()
                .distinct("tags", String.class)
                .into(new ArrayList<String>());
}

public List<String> getDistinctTags() {
        return Tags
                .<Tags>streamAll()
                .flatMap(e -> e.tags.stream())
                .distinct()
                .collect(toList());
}

假设 Tags 类定义如下,并表示panache实体:

@MongoEntity(collection="test")
public class Tags extends PanacheMongoEntity {
    public String name;
    public List<String> tags;
    // ...
}

相关问题