Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在morphia中执行聚合?_Java_Mongodb_Aggregation Framework_Morphia - Fatal编程技术网

Java 如何在morphia中执行聚合?

Java 如何在morphia中执行聚合?,java,mongodb,aggregation-framework,morphia,Java,Mongodb,Aggregation Framework,Morphia,我有一个对象的列表,我需要在Morphia中执行查询,以从给定对象的字符串的另一个嵌入列表中获得唯一的结果 对象类: 聚合的结果应该是: [A,C,B,D,E,F,L,M,N] 输出是排序的形式。我如何在morphia中实现这一点?我试图搜索官方文件,但找不到暗示 任何帮助或暗示都是可贵的。谢谢 编辑-1 结果列表中的数据不可用,我需要在结果列表(签出JSON格式)本身上应用聚合。您可以使用下面的代码使用聚合管道获取唯一的和排序类别 准备查询筛选器: Query<Fruits> q

我有一个对象的
列表
,我需要在
Morphia
中执行查询,以从给定对象的
字符串
的另一个嵌入
列表
中获得唯一的结果

对象类: 聚合的结果应该是:

[A,C,B,D,E,F,L,M,N]
输出是排序的形式。我如何在morphia中实现这一点?我试图搜索官方文件,但找不到暗示

任何帮助或暗示都是可贵的。谢谢

编辑-1
结果列表
中的数据不可用,我需要在
结果列表
(签出JSON格式)本身上应用
聚合

您可以使用下面的代码使用聚合管道获取唯一的和排序类别

准备查询筛选器:

Query<Fruits> query = datastore.createQuery(Fruits.class);
Iterator<Fruits> fruitIterator = fruitList .iterator();
CriteriaContainer orQuery = query.or();
while(fruitIterator.hasNext()) {
      Fruits fruit = fruitIterator.next();
      orQuery.add(query.and(query.criteria("id").equal(fruit.getId()), query.criteria("categories").equal(fruit.getCategories())));
 }
更新:

Mongo Shell查询

   [{ "$match" : { "$or" : [ { "$and" : [ { "_id" : 1234566} , { "categories" : [ "A" , "B" , "C" , "D"]}]} , { "$and" : [ { "_id" : 32434} , { "categories" : [ "A" , "C" , "E" , "F"]}]} , { "$and" : [ { "_id" : 32434} , { "categories" : [ "A" , "L" , "M" , "N"]}]}]}}, { "$unwind" : "$categories"}, { "$group" : { "_id" : { "categories" : "$categories"}}}, { "$sort" : { "_id.categories" : 1}}, { "$project" : { "_id" : 0 , "category" : "$_id.categories"}}]

谢谢你的回答
\u id
这里指的是
水果.id
。对吧?不客气。否是从
组生成的
\u id
。Mongo shell查询是为了比较而添加的&在文章中也添加了一些解释。我试图实现这段代码,但对上面代码中的
Fruit
对象数据在哪里以及如何使用感到困惑。你能帮帮我吗?我的意思是如何在上面的Json上应用这个聚合查询?Morphia需要水果对象来收集注释定义的元数据。其中一个示例是从
@Entity
注释(如果您定义了注释)中读取集合名称。这里有更多的信息,你有其他的设置吗?你不能运行查询吗?啊!我想我误解你了。请查看问题部分的
Edit-1
List<Fruits> fruitList = fruitControllerDao.search(fruitList);

List<Category> categories = new ArrayList<>();
datastore.createAggregation(Fruits.class)
         .unwind("categories")
         .group(Group.id(Group.grouping("categories")))
         .sort(Sort.ascending("_id.categories"))
         .project(Projection.projection("_id").suppress(), 
          Projection.projection("categories", "_id.categories"))

         .aggregate(Category.class).forEachRemaining(categories::add);
class Category {
   private String category;
}
Query<Fruits> query = datastore.createQuery(Fruits.class);
Iterator<Fruits> fruitIterator = fruitList .iterator();
CriteriaContainer orQuery = query.or();
while(fruitIterator.hasNext()) {
      Fruits fruit = fruitIterator.next();
      orQuery.add(query.and(query.criteria("id").equal(fruit.getId()), query.criteria("categories").equal(fruit.getCategories())));
 }
 List<Category> categories = new ArrayList<>();
  datastore.createAggregation(Fruits.class)
        .match(query)
        .unwind("categories")
        .group(Group.id(Group.grouping("categories")))
        .sort(Sort.ascending("_id.categories"))
        .project(Projection.projection("_id").suppress(), Projection.projection("category", "_id.categories"))
        .aggregate(Category.class).forEachRemaining(categories::add);


class Category {
    private String category;
}
   [{ "$match" : { "$or" : [ { "$and" : [ { "_id" : 1234566} , { "categories" : [ "A" , "B" , "C" , "D"]}]} , { "$and" : [ { "_id" : 32434} , { "categories" : [ "A" , "C" , "E" , "F"]}]} , { "$and" : [ { "_id" : 32434} , { "categories" : [ "A" , "L" , "M" , "N"]}]}]}}, { "$unwind" : "$categories"}, { "$group" : { "_id" : { "categories" : "$categories"}}}, { "$sort" : { "_id.categories" : 1}}, { "$project" : { "_id" : 0 , "category" : "$_id.categories"}}]