Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/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
如何使用Spring Mongodb聚合API转换此查询?_Spring_Mongodb_Spring Data_Spring Data Mongodb - Fatal编程技术网

如何使用Spring Mongodb聚合API转换此查询?

如何使用Spring Mongodb聚合API转换此查询?,spring,mongodb,spring-data,spring-data-mongodb,Spring,Mongodb,Spring Data,Spring Data Mongodb,这是我要执行的查询: db['applications'].aggregate( {$project: {key:1, _id:0}} ,{$group: { _id:null, keyList: {$addToSet:"$key"}}} ); 这是我正在使用的代码: Aggregation agg = newAggregation( project("key"), group("key").addToSet("key").as("keyl

这是我要执行的查询:

db['applications'].aggregate(
 {$project: {key:1, _id:0}}
 ,{$group: { _id:null, keyList: {$addToSet:"$key"}}} );
这是我正在使用的代码:

 Aggregation agg = newAggregation(
            project("key"),
            group("key").addToSet("key").as("keylist")
    );
然而,产生的结果是:

Executing aggregation: 
{ "aggregate" : "applications" , "
  pipeline" : [ 
 { "$project" : { "key" : "$key"}} , 
 { "$group" : { "_id" : "$key" , "keylist" : { "$addToSet" : "$key"}}}
]}
为什么组中的_id键设置为'group'的参数。如何使其为空?

如何让Spring MongoData生成我想要的查询

不幸的是,对于组阶段,您无法通过null查看

但是,可以通过为集合中不存在的组id选择字段名来实现相同的目的。不漂亮,但应该有用

Aggregation agg = newAggregation(
            project("key"),
            group("ANYSTRINGWHICHISNOTFIELDNAME").addToSet("key").as("keylist")
    );

您不必关心项目阶段—管道中的数据越小越好,但这样的结果将是相同的。

您可以使用采用
字符串的方法…
,只需在无参数中管道:

group().addToSet("key").as("keylist")
在当前发布的版本中,呈现为:

$group: { _id : {}, keyList : { $addToSet : "$key" }}

虽然这与文档不完全一致,但与
\u id:null
相同。我们已经归档并修复了将在Spring Data Commons的1.3.2和1.4 M1中发布的数据。

对我来说不起作用,但起作用的是在集合中声明如下虚拟属性:

Class Model{
...
...
private Integer dummyNotExistsProp
}
这是一个愚蠢的查询,没有匹配和投影,只是为了演示问题的解决方案:

Aggregation agg = Aggregation.newAggregation(
                Aggregation.match(Aggregation.group("dummyNotExistsProp").count().as("totalobjs"));

从当前版本的Spring Data MongoDB开始,如果不指定参数进行分组,它将按null分组

Aggregation agg = newAggregation(
            project("key"),
            group().addToSet("key").as("keylist")
    );

仅供参考:这与您的问题没有直接关系,但您不需要在$group之前显式添加$project阶段。MongoDB将自动确定源文档中需要哪些字段,并仅提取这些字段。(我是聚合框架的主要开发人员)出于好奇,这对我的答案有帮助吗?spring data mongo 1.10.8.RELEASE不起作用,所以改用空组()
Aggregation agg = newAggregation(
            project("key"),
            group().addToSet("key").as("keylist")
    );