如何对基于数组的文档进行排序并仅返回结果的第一个元素

时间:2013-12-11 11:22:22

标签: mongodb

我正在以mongodb中的数据格式存储文档。

{
    "plans": [
        {
            "status": "cooking",
            "timestamp": "2016-01-15"
        },
        {
            "status": "washing ",
            "timestamp": "2014-01-18"
        },
        {
            "status": "enjoying some tea",
            "timestamp": "2014-02-22"
        }
    ],
    "username": "preethiJain"
}

是否可以以这样的方式编写查询:它将基于时间戳返回数组元素的排序,并从结果中返回第一个元素。

例如在上面的例子中,它将返回元素

{
            "status": "washing ",
            "timestamp": "2014-01-18"
}

目前我正在阅读整个结构并根据程序方式对其进行排序并返回第一个结构,但这需要花费大量时间来处理请求。

如果可能,请告诉我。

1 个答案:

答案 0 :(得分:1)

您可以使用Aggregation Framework执行此操作。查询应该是:

db.test.aggregate(
  {$match : {"username" : "preethiJain"}},
  {$unwind: "$plans"},
  {$sort: {"plans.timestamp":1}},
  {$limit : 1}
)