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

MongoDB聚合函数:$sort不使用$sample?,mongodb,Mongodb,我目前无法构建一个mongoDB查询,该查询首先使用排序,然后输出一个样本。数据库中的文档如下所示: { "_id" : "cynthia", "crawled" : false, "priority" : 2.0 } 我正在努力实现以下目标:给我一个具有最高优先级的随机元素。 我使用以下查询对其进行了测试: db.getCollection('profiles').aggregate([ {$match: {crawled: false }}, {$so

我目前无法构建一个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有更多的经验?如果您有更好的“优先级”功能实现的想法,请告诉我

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

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

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

因此,您将从筛选的文档集中获得一个随机文档

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

db.profiles.aggregate([
    {$match: {crawled: false }}, 
    {$sort: {priority: -1}}, 
    {$limit: 1}
])
这不是你要找的。根据文件:

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

因此,您将从筛选的文档集中获得一个随机文档

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

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

你想得到“一”个随机值吗?如果是这样,那么您认为优先级与此有什么关系?我们有几个服务使用此查询来获取它们应该处理的当前工作。通过使用一些随机性,我试图防止它们相互阻碍。它为我们的用例节省了足够的时间。有了这一优先事项,我们将努力创造就业机会,这应该作为第一步。不知道他们是否是实现它的更好方法。下面的答案“假定”是您的意思是
$limit
,但关键字错误。所以这显然不是你要问的。我在问你们,你们是否真的想让“一”是随机的,然后解释优先权应该如何应用。你真的不清楚你期望的是什么,语言也不清楚。我想如果你能从5到10份样本文件中挑选出来,告诉我们你会期望发生什么。如果你能通过展示文件和你期望发生的事情基本上“画出来”,那么对每个人来说都是非常清楚的。嗨,尼尔,很抱歉回答得太晚了。我现在将米克尔的答案标记为正确,因为这是最接近我想要达到的目标。
$limit
和之后的
$sample
的组合正符合我们的预期。对所使用的字段启用索引非常重要。谢谢大家:)你们想得到“一”个随机值吗?如果是这样,那么您认为优先级与此有什么关系?我们有几个服务使用此查询来获取它们应该处理的当前工作。通过使用一些随机性,我试图防止它们相互阻碍。它为我们的用例节省了足够的时间。有了这一优先事项,我们将努力创造就业机会,这应该作为第一步。不知道他们是否是实现它的更好方法。下面的答案“假定”是您的意思是
$limit
,但关键字错误。所以这显然不是你要问的。我在问你们,你们是否真的想让“一”是随机的,然后解释优先权应该如何应用。你真的不清楚你期望的是什么,语言也不清楚。我想如果你能从5到10份样本文件中挑选出来,告诉我们你会期望发生什么。如果你能通过展示文件和你期望发生的事情基本上“画出来”,那么对每个人来说都是非常清楚的。嗨,尼尔,很抱歉回答得太晚了。我现在将米克尔的答案标记为正确,因为这是最接近我想要达到的目标。
$limit
和之后的
$sample
的组合正符合我们的预期。对所使用的字段启用索引非常重要。谢谢大家:)谢谢你们的回答!限制是个好主意。我仍然希望在选择结果时具有一些随机性,因为这是我们廉价的“非阻塞”查询设计。我们有几个工作人员使用查询结果来完成他们的工作,我不希望工作人员错误地处理相同的结果。我现在这样做:
([{$match:{crawled:false},{$sort:{priority:-1}},{$limit:10},{$sample:{size:1}}])
谢谢你的回答!限制是个好主意。我仍然希望在选择结果时具有一些随机性,因为这是我们廉价的“非阻塞”查询设计。我们有几个工作人员使用查询结果来完成他们的工作,我不希望工作人员错误地处理相同的结果。我现在这样做:
([{$match:{crawled:false},{$sort:{priority:-1}},{$limit:10},{$sample:{size:1}}])