当前位置: 首页 > 知识库问答 >
问题:

使用MongoDB发现不同的Panache

王鹏飞
2023-03-14

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

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

mongo Shell中的解决方案:

db.ApiModel.distinct("tags")

这给了我:

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

但我怎么能用装腔作势达到同样的效果呢?PanacheMongoEntity不提供特定的distinct方法。我也不知道如何使用find方法来实现我的目标,或者使用这个方法是否可能。

共有1个答案

邹禄
2023-03-14

您可以使用这两种方法中的任何一种从集合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;
    // ...
}
 类似资料:
  • 我正在测试声纳以确保关闭数据库连接,我有我不明白的额外结果。 我正在使用嵌入的maven版本3.3.9尝试执行eclipse中maven目标“sonar:sonar”的两个版本的代码。 我试过sonarqube服务器的三个版本:5.6.6、6.2和6.4。 使用此代码 关于关闭资源,我有以下问题: sonarqube 5.6.6: 关闭此“连接” 关闭此“准备语句” Sonarqube 6.2:

  • 问题内容: 我目前正在将构建过程从Ant迁移到Maven。我们的应用程序已部署到许多不同的客户,每个客户都有一组独特的依赖项和配置。我可以实现不同的配置文件以对它们进行建模,并从中构建所需的战争。但是,这是一个在编译时发生的过程。 每个版本都标记为SVN,并已上传到我们的内部Nexus存储库。我希望能够采用定义的发行版并根据配置文件对其进行重构。有没有办法做这样的事情?除了个人资料外,我还应该使用

  • 我需要我的logstash conf文件向一个kafka主题发送一条消息,以指示已处理的文档已发送到ElasticSearch。我已经准备好了logstash文件来构造发送到ElasticSearch的数据,但是我需要通过同一个logstash文件向kafka主题发布“是”或“否”消息。

  • 问题内容: 我有一个包含多个文档的mongo集合,假设以下内容(假设出于任何原因,汤姆在2012年都有两名历史老师) 我希望能够查询“汤姆”曾经有过的所有不同的班级,即使汤姆有多个“历史”班级且有多个老师,我只想查询得到最少数量的文档,以便汤姆在所有这些都将显示一次,而“历史记录”只显示一次,而不是查询结果包含重复“历史记录”的多个文档。 我看了一下:http : //mongoengine- o

  • 我想执行一个maven版本,在运行于jdk 1.7的Jenkins安装上编译java 1.8代码 我有一个使用JDK参数插件用Java1.8编译的项目。它在进行常规构建时有效。 当我使用maven发布插件进行maven发布时,它会将JVM与java 1.7相结合,而不是插件上指定的版本。我猜它需要环境中的java版本。 如果我将JAVA_HOME for the job设置为1.8,它就会工作。

  • 例如当前数据结构是:{ "name": "mike" } 业务迭代后变成了:{ "name": "mike", "age" : 20 } 那么如何将前者也都变成例如:{ "name": "mike", "age" : 0 } 来实现类似关系型数据库的效果?还是说做不到只能用回关系型数据库