2015-01-26 3 views
1

Я пробовал искать здесь, но не смог найти то, что мне нужно. У меня есть следующие документы:Вернуться все поля MongoDB Aggregate

{ 
    appletype:Granny, 
    color:Green, 
    datePicked:2015-01-26, 
    dateRipe:2015-01-24, 
    numPicked:3 
}, 

{ 
    appletype:Granny, 
    color:Green, 
    datePicked:2015-01-01, 
    dateRipe:2014-12-28, 
    numPicked:6 
} 

Я хотел бы вернуть только те яблоки, которые выбрали последние, все поля. Я хочу, чтобы мой запрос вернул мне первый документ только по существу. Когда я пытаюсь сделать:

db.collection.aggregate([ 
    { $match : { "appletype" : "Granny" } }, 
    { $sort : { "datePicked" : 1 } }, 
    { $group : { "_id" : { "appletype" : "$appletype" }, 
     "datePicked" : { $max : "$datePicked" } }, 
]) 

Это вернуть мне все яблоки выбрали последние, однако только с appletype: Бабуля и datePicked: 2015-01-26. Мне нужны остальные поля. Я пытаюсь использовать $ project и добавлять все поля, но это не помогло мне. Кроме того, когда я добавил другие группы в группу, поскольку datePicked уникален, он возвратил обе записи.

Как я могу вернуть все поля, только для последних datePicked?

Спасибо!

+0

Вы говорите «Я хочу, чтобы мой запрос вернул мне первый документ только по существу». Итак, вы хотите получить только один документ с последним datePicked? – stalk

+0

Коллекция, которую я использую, составляет несколько тысяч записей. Я хотел бы получить все appleTypes, выбранные в последней datePicked, возвращая все поля, составляющие «яблочный» документ. Поэтому, если бы яблоки, выбранные в 2014-01-26 (или что бы ни случилось с последней датой), верните эти n записей. – Vince

ответ

1

Из вашего описания, похоже, что вы хотите, чтобы один документ для каждого из типов яблока в вашей коллекции и показывал документ с самым последним значением datePicked.

Вот совокупный запрос для этого:

db.collection.aggregate([ 
    { $sort: { "datePicked": -1 }, 
    { $group: { _id: "$appletype", color: { $first: "$color" }, datePicked: { $first: "$datePicked" }, dateRipe: { $first: "$dateRipe" }, numPicked: { $first: "$numPicked" } } }, 
    { $project: { _id: 0, color: 1, datePicked: 1, dateRipe: 1, numPicked: 1, appletype: "$_id" } } 
]) 

Но затем на основе совокупного запроса вы написали, это выглядит, как вы пытаетесь получить это:

db.collection.find({appletype: "Granny"}).sort({datePicked: -1}).limit(1); 
Смежные вопросы