Pipeline di aggregazione Mongodb su come limitare un push di gruppo

Non sono in grado di limitare la quantità di elementi inseriti in una funzione di gruppo con la pipeline di aggregazione. È ansible? Piccolo esempio:

Dati:

[ { "submitted": date, "loc": { "lng": 13.739251, "lat": 51.049893 }, "name": "first", "preview": "my first" }, { "submitted": date, "loc": { "lng": 13.639241, "lat": 51.149883 }, "name": "second", "preview": "my second" }, { "submitted": date, "loc": { "lng": 13.715422, "lat": 51.056384 }, "name": "nearpoint2", "preview": "my nearpoint2" } ] 

Ecco la mia pipeline di aggregazione:

  var pipeline = [{ //I want to limit the data to a certain area $match: { loc: { $geoWithin: { $box: [ [locBottomLeft.lng, locBottomLeft.lat], [locUpperRight.lng, locUpperRight.lat] ] } } } }, // I just want to get the latest entries { $sort: { submitted: -1 } }, // I group by name { $group: { _id: "$name", < --get name submitted: { $max: "$submitted" }, < --get the latest date locs: { $push: "$loc" }, < --push every loc into an array THIS SHOULD BE LIMITED TO AN AMOUNT 5 or 10 preview: { $first: "$preview" } } }, //Limit the query to at least 10 entries. { $limit: 10 } ]; 

Come posso limitare l’array locs a 10 o qualsiasi altra dimensione? Ho provato qualcosa con $each e $slice ma non sembra funzionare.

Supponiamo che le coordinate in basso a sinistra e le coordinate in alto a destra siano rispettivamente [0, 0] e [100, 100] . Da MongoDB 3.2 è ansible utilizzare l’operatore $slice per restituire un sottoinsieme di un array che è ciò che si desidera.

 db.collection.aggregate([ { "$match": { "loc": { "$geoWithin": { "$box": [ [0, 0], [100, 100] ] } }} }}, { "$group": { "_id": "$name", "submitted": { "$max": "$submitted" }, "preview": { "$first": "$preview" } "locs": { "$push": "$loc" } }}, { "$project": { "locs": { "$slice": [ "$locs", 5 ] }, "preview": 1, "submitted": 1 }}, { "$limit": 10 } ])