【问题标题】:"TOP N WITH TIES" for MongoDBMongoDB 的“TOP N WITH TIES”
【发布时间】:2015-06-12 14:41:07
【问题描述】:

SQL Server 有一个方便的运算符"TOP N WITH TIES",它返回

两行或多行在有限的结果集中并列最后一位

例如,来自 {10, 9, 8, 8, 2} 的 TOP 3 WITH TIES 将返回 {10, 9, 8, 8}。

对于 MongoDB,TOP N WITH TIES 是否有等效的单查询?

我不能使用两个查询(第二个查询由第一个返回的最小值),因为我在 doesn't let you return more than one cursor from the same collection 的 Meteor 发布函数中运行查询。

【问题讨论】:

  • 你需要什么样的光标?类似于.fetch 的输出好吗?它仍然可以通过稍微修改的更手动的发布方法来使用。使用不返回游标的聚合框架听起来确实可行。
  • fetch() 原样,失去反应性。
  • 精确对您有多重要?为什么不返回 2*N 并在客户端上解决?
  • @DanDascalescu 不一定。您可以使用基本匹配所有观察者查询来检查新记录是否更改结果并相应地报告给客户端

标签: javascript mongodb meteor


【解决方案1】:

您不必返回子查询即可将其用作标准。这基本上与您在任何其他 SQL 引擎中必须做的事情相同。

var min = Collection.find({},{limit:10, sort: {rank: -1}}).fetch()[9].rank
return Collection.find({rank: {$gte: min}})

【讨论】:

  • 一个简单的解决方案,只返回一个游标,但仍然运行两个查询。
  • 这种事情永远是 2 个查询,任何数据库都无法在不查看所有文件的情况下知道哪些文件共享一个关系。只取决于它是否有语法糖浇头(sql server)。例如,查看 postgres 中的子查询:stackoverflow.com/questions/9629953/…
猜你喜欢
  • 2012-03-26
  • 2014-04-05
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-21
  • 1970-01-01
相关资源
最近更新 更多