通过排序数据获得不同的值

Sag*_*rpe 14 sorting mongodb distinct-values

我需要一个Query来获取不同的密钥,并根据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"
}
Run Code Online (Sandbox Code Playgroud)

我需要一个查询,对得分上的所有记录进行排序,并返回给我不同的密钥......

Stu*_*art 12

您可以使用聚合框架按要分离的元素进行分组(组使其不同).因此,如果您希望对分数进行排序,则可以获得不同的密钥,您可以执行以下操作 - 按分数排序,按键分组并将分数添加为元素数组(已排序):

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

这将导致不同的键以及分数数组,这些分数是包含在具有重复键的文档中的那些分数.我不确定这正是你正在寻找的东西,我知道这是一个古老的问题,但我认为这可能有助于将来看待它的其他人 - 作为另一种方式.

  • @user3072843 据我所知, $addToSet 以非排序顺序添加项目,而 $push 以它们到达组的顺序添加,在这种情况下是排序顺序。 (2认同)

And*_*ich 8

mongodb中有一个独特的命令:

你可以像这样使用不同的:

db.test.distinct({"key":true,"score":true,"note":true}); 
Run Code Online (Sandbox Code Playgroud)

关系型数据库中也是一样:

SELECT DISTINCT key,score,note FROM test; 
Run Code Online (Sandbox Code Playgroud)

然后通过添加以下代码对结果进行排序:

.sort({score : 1}) // 1 = asc, -1 = desc
Run Code Online (Sandbox Code Playgroud)

总结果将是这样的:

 db.test.distinct({"key":true,"score":true,"note":true}).sort({score : 1}); 
Run Code Online (Sandbox Code Playgroud)

  • 显然这不再可行(v3.8.0) - 产生错误,排序不能与不同的一起使用。你可否确认? (26认同)
  • sort不能与distinct一起使用 (12认同)