L'agrégation somme au Printemps de Données MongoDB
J'ai MongoDB Page et Post collections. Chaque page du document a champ postIds qui est la matrice de post Id (objets de Chaîne). Je veux utiliser l'agrégation de compter le nombre de posts (=nombre d'éléments dans le tableau postIds) pour chaque page. J'ai écrit Shell Mongo fonction d'agrégation qui renvoie exactement ce que je veux:
db.page.aggregate([
{$unwind : '$postIds'},
{$group : {_id: '$_id', 'sum': { $sum: 1}}}
])
et il renvoie ce résultat:
{ "_id" : "3", "sum" : 3 }
{ "_id" : "2", "sum" : 3 }
Cela signifie que la page avec l'id 3 a 3 postes, et la page avec l'id 2 a 3 postes en tant que bien, ce qui est correct.
Maintenant, je voulais écrire même à l'aide de Printemps MongoDB Agrégation, et a écrit ce simple test JUnit:
/**
* Test page posts count
*/
@Test
public void testPagePostsCount() throws Exception{
MongoTemplate template = repository.getMongoTemplate();
Page page = new Page();
page.setPageId("2210");
page.setUserId("azec");
List<String> postList = new ArrayList<String>();
postList.add("53eb1a560efbe048c7ea698d");
postList.add("53eb1a6b0efbe048c7ea698e");
page.setPostIds(postList);
template.save(page);
Aggregation agg = newAggregation(
match(Criteria.where("pageId").is("2210")),
unwind("postIds"),
group("_id").sum("1").as("sum")
//project("$sum").and("pageId").previousOperation()
);
AggregationResults<PostCount> results = template.aggregate(agg, "page", PostCount.class);
List<PostCount> postCount = results.getMappedResults();
System.out.println("Done!");
}
Toutefois, cette agrégation requête renvoie ce natif de Mongo requête:
2014-08-13 20:06:07,949 DEBUG [org.springframework.les données.mongodb.de base.MongoTemplate] - l'Exécution de l'agrégation:
{
"aggregate":"page",
"pipeline":[
{
"$match":{
"pageId":"2210"
}
},
{
"$unwind":"$postIds"
},
{
"$group":{
"_id":"$_id",
"sum":{
"$sum":"$1"
}
}
}
]
}
Questions:
1. Comme vous pouvez le voir, la différence est avec le $valeur de somme de $1. J'ai besoin d'y passer numéro 1 au lieu de $1, mais je ne suis pas sûr de savoir comment.
2. Ai-je besoin d'exploitation du projet ici?
Grâce
Vous devez vous connecter pour publier un commentaire.
J'ai compris enfin. La clé est d'utiliser la fonction count() la fonction d'agrégation au Printemps de Données pour MongoDB, ce qui se traduit par la somme des incréments de 1 en natif shell Mongo. C'est mon dernier Test JUnit:
Donc, finalement, ce qui se traduit par la suite natif opération d'agrégation: