返回所有字段MongoDB Aggregate

时间:2015-01-26 17:37:35

标签: mongodb

我试着在这里搜索,但却找不到我需要的东西。我有这样的文件:

{
    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:Granny和datePicked:2015-01-26。我需要其余的字段。我尝试使用$ project并添加所有字段,但它并没有得到我所需要的东西。此外,当我将其他字段添加到组中时,由于datePicked是唯一的,因此它返回了两个记录。

如何才能返回所有字段,仅查看最新的datePicked?

谢谢!

1 个答案:

答案 0 :(得分: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);