我试着在这里搜索,但却找不到我需要的东西。我有这样的文件:
{
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?
谢谢!
答案 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);