Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB集团+;排序不';行不通_Mongodb_Sorting_Aggregation Framework - Fatal编程技术网

MongoDB集团+;排序不';行不通

MongoDB集团+;排序不';行不通,mongodb,sorting,aggregation-framework,Mongodb,Sorting,Aggregation Framework,我有这种情况。我收集了一些已发布的消息。信息可以共享(比如在Facebook上)。每次共享消息时,都会创建一条新消息,其中包含有关共享消息来源、原始消息以及内容可能被更改的信息。单个文档如下所示: { "_id": <id> "source": <source_id> // if it's original, own id is used "shared_from": <message_id> "trending": 4,

我有这种情况。我收集了一些已发布的消息。信息可以共享(比如在Facebook上)。每次共享消息时,都会创建一条新消息,其中包含有关共享消息来源、原始消息以及内容可能被更改的信息。单个文档如下所示:

{
    "_id": <id>
    "source": <source_id>   // if it's original, own id is used
    "shared_from": <message_id>
    "trending": 4,
    "created": <Datetime>
}

当我这么做的时候,我会把结果搞得一团糟。它根本没有分类。这只是随机的。我遗漏了什么吗?

您得到的结果没有排序,因为您在
$group
阶段之后没有对其进行排序。您已经按趋势对事物进行了排序,并在分组时利用了这一点,以确保只保留趋势得分最高的每个排序的
\u id
值。但是不能保证
$group
最终会保留任何特定顺序,因此您应该重新排序,为此您需要保留趋势分数(假设您打算通过降低趋势分数来保持顺序)

类似这样的方法会奏效:

db.Messages.aggregate({
    { $sort: { trending: -1 } },
    { $group: { _id:"$source", doc_id:{$first: "$_id"}, trend:{$first:"$trending"}}},
    { $sort:{trend:-1} },
    { $project: { _id: "$doc_id" } },
    { $limit: 6 }
})

您得到的结果没有排序,因为您在
$group
阶段之后没有对其进行排序。您已经按照趋势进行了排序,并在分组时利用了这一点,以确保您只保留了具有最高趋势得分的每个排序的
\u id
值。但不能保证
$group
将最后保留任何特定的顺序,因此您应该再次排序,为此您需要保持趋势分数(假设您打算通过趋势分数下降来保持顺序)

类似这样的方法会奏效:

db.Messages.aggregate({
    { $sort: { trending: -1 } },
    { $group: { _id:"$source", doc_id:{$first: "$_id"}, trend:{$first:"$trending"}}},
    { $sort:{trend:-1} },
    { $project: { _id: "$doc_id" } },
    { $limit: 6 }
})

如果我们从顺序阶段的初始排序中提取一些值,那么二次排序是保持顺序的最佳方式吗?@hbrannan不确定你的问题是什么。这是关于答案吗?如果我们从顺序阶段的初始排序中提取一些值,二次排序是保持顺序的最佳方式吗?@hbran南不知道你的问题是什么。是关于这里的答案吗?