【问题标题】:get Distinct Values with Sorted Data使用排序数据获取不同的值
【发布时间】:2011-06-13 03:58:57
【问题描述】:

我需要一个查询来获取不同的键,并根据 Mongodb 中的分数进行排序 1.6.5

我有记录喜欢

{key ="SAGAR"
score =16
note ="test1"
}

{key ="VARPE"
score =17
note ="test1"
}

{key ="SAGAR"
score =16
note ="test2"
}

{key ="VARPE"
score =17
note ="test2"
}

我需要一个查询来对所有记录进行排序并返回不同的键.....

【问题讨论】:

  • 那么,如果您在这组数据上运行此查询,期望的结果是什么(在询问查询问题时总是显示最好的结果)
  • 你使用什么编程语言?
  • @SagarVarpe - 您接受的答案不再可行(似乎聚合框架现在是唯一的方法)。也许考虑更改您接受的答案?
  • 在 mongo v2.2+ 中,你可以这样做:db.test.distinct("key").sort();

标签: sorting mongodb distinct-values


【解决方案1】:

您可以使用聚合框架按您想要区分的元素进行分组(组使其与众不同)。因此,如果您希望按分数排序然后获得不同的键,您可以执行以下操作 - 按分数排序、按键分组并将分数添加为元素数组(已排序):

db.test.aggregate([
    { $sort : { score : -1 } },
    { $group : {_id : "$key", scores : { $push : "$score" } } }
])

这将产生不同的键以及分数数组,这些分数是包含在具有重复键的文档中的分数。我不确定这正是您要寻找的东西,我知道这是一个老问题,但我认为这可能会帮助其他人在未来看到它 - 作为这样做的另一种方式。

【讨论】:

  • $push 是用于此目的的错误运算符。改用 $addToSet。
  • @user3072843 据我所知,$addToSet 按未排序的顺序添加项目,而 $push 按它们到达组的顺序添加,在本例中为排序顺序。
【解决方案2】:

mongodb中有distinct command

你可以像这样使用 distinct:

db.test.distinct({"key":true,"score":true,"note":true}); 

在关系数据库中也是如此:

SELECT DISTINCT key,score,note FROM test; 

sort result 添加以下代码:

.sort({score : 1}) // 1 = asc, -1 = desc

总的结果是这样的:

 db.test.distinct({"key":true,"score":true,"note":true}).sort({score : 1}); 

【讨论】:

  • 显然这不再可行(v3.8.0) - 产生排序不能与 distinct 一起使用的错误。你能确认一下吗?
  • 排序不能与 distinct 一起使用
  • 有一个功能请求处于活动状态,如果您有同样的问题,请投票给它:jira.mongodb.org/browse/SERVER-2130
  • 我有 MongoDB 3.0.7,对于 1 个字段,它运行良好:db.collection.distinct("date").sort({date:1})
  • MongoDB 3.2.5 只需要一个字符串作为distinct 的参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多