【发布时间】:2018-05-12 06:06:28
【问题描述】:
我目前未能构建一个首先使用排序然后输出一个样本的 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 经验的人对此有什么想法吗?如果您有更好地实现“优先级”功能的想法,请告诉我。
每个想法都受到高度赞赏。
【问题讨论】:
-
您是否要获得“一个”随机值?如果是这样,那么您认为优先级与此有什么关系?
-
我们有几个服务使用这个查询来获取他们应该从事的当前工作。通过使用一些随机性,我试图阻止它们相互阻挡。对于我们的用例来说,这已经足够节省了。有了这个优先级,我们试图创造就业机会,这应该是首要的工作。不知道,如果他们是实现它的更好方法..
-
下面的答案“假定”您的意思是
$limit,但关键字错误。所以这显然不是你要问的。我问你是否真的打算“一个”是随机的,然后实际解释应该如何应用优先级。真的不清楚你的期望是什么,语言也没有清楚地表达出来。我想如果你能从 5 到 10 个样本文件中向我们展示你期望发生的事情。如果您基本上可以通过显示文档和您期望发生的事情来“画出那个”,那么每个人都会非常清楚。 -
嗨,尼尔,很抱歉回答迟了。我现在将 mickls 的答案标记为正确,因为它最接近我想要实现的目标。
$limit和之后的$sample的组合完全符合我们的预期。在使用的字段上启用索引非常重要。谢谢大家:)
标签: mongodb