首页 > 解决方案 > MongoDB 聚合函数:$sort 不能与 $sample 一起使用?

问题描述

我目前无法构建一个首先使用排序然后输出一个样本的 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 经验的人对此有什么想法吗?如果您有更好地实现“优先级”功能的想法,请告诉我。

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

标签: mongodb

解决方案


$sample不是你要找的。根据文档:

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

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

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

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

推荐阅读