派头 MongoDB 发现不同

Panache with MongoDB find distinct

我有以“标签”数组作为属性的文档。现在我想查询所有不同的标签项。

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

mongo 中的解决方案 shell:

db.ApiModel.distinct("tags")

这给了我:

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

但是我怎样才能用 Panache 达到同样的效果呢? PanacheMongoEntity 不提供特定的不同方法。我也不知道如何使用 find 方法来实现我的目标,或者是否可以使用此方法。

我可能想到的就是找到所有带有 find("tags", "*") 的标签(* 是通配符吗?)然后处理 Java 中的重复项,但我认为这不是预期用途.

您可以使用这两种方法中的任何一种从集合 test.

中获取不同的 tags
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 class 定义如下并表示 Panache 实体:

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