jar*_*ery 0 javascript performance mongodb mongodb-query
我的文件看起来像这样。
{
"_id" : ObjectId("572c4bffd073dd581edae045"),
"name" : "What's New in PHP 7",
"description" : "PHP 7 is the first new major version number of PHP since 2004. This course shows what's new, and what's changed.",
"difficulty_level" : "Beginner",
"type" : "Normal",
"tagged_skills" : [
{
"_id" : "5714e894e09a0f7d804b2254",
"name" : "PHP"
}
],
"created_at" : 1462520831.649,
"updated_at" : 1468233074.243 }
Run Code Online (Sandbox Code Playgroud)
是否可以在单个查询中获取最近的 5 个文档和总数。我对这个要求使用了两个查询,如下所示。
db.course.find().sort({created_at:-1}).limit(5)
db.course.count()
Run Code Online (Sandbox Code Playgroud)
这是聚合框架的完美工作。
db.course.aggregate(
[
{ "$sort": { "created_at": -1 }},
{ "$group": {
"_id": null,
"docs": { "$push": "$$ROOT" },
"count": { "$sum": 1 }
}},
{ "$project": { "_id": 0, "count": 1, "docs": { "$slice": [ "$docs", 5 ] } }}
]
)
Run Code Online (Sandbox Code Playgroud)
如果您的 MongoDB 服务器不支持,$slice那么您需要使用丑陋且低效的方法。
db.course.aggregate(
[
{ "$sort": { "created_at": -1 }},
{ "$group": {
"_id": null,
"docs": { "$push": "$$ROOT" },
"count": { "$sum": 1 }
}},
{ "$unwind": "$docs" },
{ "$limit": 5 }
]
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3896 次 |
| 最近记录: |