【问题标题】:How to sort a collection by row in MongoDB?如何在 MongoDB 中按行对集合进行排序?
【发布时间】:2017-10-24 20:10:19
【问题描述】:

我正在使用带有 hapi.JS 的 MongoDB。我有一个集合,其中包含架构中的几行。我想按 asc 顺序或 desc 顺序对行进行排序,但想在 URI 中提及它。例如 URI 应该看起来像这样

/api/v1/customers?sort=name&direction=asc&limit=30

如何按 asc 或 desc 顺序对该集合进行排序,并且限制也可以是固定的或灵活的。 到目前为止,我已经这样定义了,但即使我在 URI 中提到排序,它也只会按 asc 顺序给出输出。

 Models.Account.find(criteria,projection,{skip:5,limit:5},function(err,resp){
                if(err)
                callbackRoute(err);
                else 
                callbackRoute(err,resp);
            }).sort({[_id]:"asc"});

【问题讨论】:

  • 如果您想对您在 URI 中提供的内容进行限制变量,则不能插入固定数字,排序方向相同。使用 express 或您使用的任何内容从您的 URI 中读取变量值并插入它们,例如 limit: mylimit 和 sort({ [_id]: mydirection })

标签: mongodb hapijs


【解决方案1】:
db.yourcollection.find(...).sort({ name:1 }).limit(30)

或使用动态值:

// following is ECMA 6 only
// get params and make sure values are what you expect (check for injection) + direction must be = "asc" || "desc"
db.yourcollection.find(...).sort({ [sort]: direction }).limit(30)

【讨论】:

  • 为了限制我尝试使用插件 hapi-pagination 和 JOI 验证,但它似乎没有工作。
  • 分页是一个自己的问题,如果您使用普通的 mongo,您将不得不使用 skip() 或实现自己的逻辑。但是,没有分页,这就足够了。
  • 如果我想同时拥有 asc 和 desc 作为选项,并让用户根据要求在 URI 中提及它怎么办?
  • 但它会再次受到限制,因为我在这里提到的任何内容都将根据返回结果之前在数据库中进行排序。但我正在寻找更灵活的方法,我可以在端点中提及而是
  • 好吧,那么请在你的问题中清楚地说出你想要什么。那不是你要求的。当然只有行被排序,还有什么?它是唯一可以排序的东西,没有其他任何意义。
猜你喜欢
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 2011-04-04
  • 2019-08-04
  • 1970-01-01
  • 2021-01-15
相关资源
最近更新 更多