如何使用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")
);