MongoDB聚合函数:$ sort不能使用$ sample?

时间:2018-05-11 16:31:50

标签: mongodb

我目前无法构建首先使用排序然后输出一个样本的mongoDB查询。数据库中的文档如下所示:

{
    "_id" : "cynthia",
    "crawled" : false,
    "priority" : 2.0
}

我试图实现以下目标:给我一个优先级最高的随机元素 我用以下查询测试了它:

db.getCollection('profiles').aggregate([
   {$match: {crawled: false }}, 
   {$sort: {priority: -1}}, 
   {$sample: {size: 1}}
]) 

不幸的是,这不起作用。 Mongo似乎完全忽略了$sort。我认为使用$sort与否之间没有区别。

拥有更多mongoDB经验的人是否对此有所了解?如果您想要更好地实施"优先级"功能告诉我。

每个想法都受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

$sample不是你想要的。根据文件:

  

从输入中随机选择指定数量的文档。

因此,您将从过滤后的文档集中获取一个随机文档。

$limit是您需要的,因为它需要前一阶段的第一个n文档。您的管道应如下所示:

db.profiles.aggregate([
    {$match: {crawled: false }}, 
    {$sort: {priority: -1}}, 
    {$limit: 1}
])