2015-11-12 1 views
2

L'utilisation de Model.aggregate() de mongoose renvoie un tableau vide.Agrégat renvoie le tableau vide

J'ai essentiellement copié le format comme vu here.

var match = {}; 
var project = {}; 
    project["_id"] = 0; 
    project["products.totalprice"] = 1; 
    project["line"] = "$products.closedate"; 

ThisCollection.aggregate([ 
    {$match: match}, 
    {$project: project}, 
    {$group: { 
     _id: "$line" 
    }} 

], function(err, docs){ 
    console.log(docs); //!! Returning [] 
}); 

Mon schéma est essentiellement un champ name et _id avec un tableau imbriqué de produits avec totalprice, closedate et d'autres domaines.

Il y a certainement une pléthore d'entrées (quelque 130 000 enregistrements). Quelqu'un peut-il repérer un problème avec cela?

+0

La requête sans l'instruction '$ group' renvoie-t-elle des résultats? – Jaco

+0

@Jaco Nope, essayé encore vide. La vérification de mes clés à nouveau, mais le "manquant était une faute de frappe sur le copier-coller .. –

+0

@Jaco Presque ... En utilisant $ products.totalprice dans l'objet' project', je reçois maintenant 'undefined' pour docs –

Répondre

1

J'ai créé ces données fictives pour représenter un squelette de votre schéma:

db.data.save({name:"a",products:{totalprice:1,closedate:1}}) 
db.data.save({name:"b",products:{totalprice:2,closedate:2}}) 

Cette requête ne renvoie deux enregistrements et est identique à la vôtre lorsque vous insérez la variable chaîne JSON pour le JavaScript project

ThisCollection.aggregate([{$match:{}},{$project:{"_id":0,"products.totalprice":1,line:"$products.closedate"}},{$group:{_id:"$line"}}]) 
+0

Ma collection était vide –

+0

Oui, cela n'aide pas :-) – Jaco