gpt4 book ai didi

MongoDB 分组+排序不起作用

转载 作者:行者123 更新时间:2023-12-03 02:04:14 27 4
gpt4 key购买 nike

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

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

趋势字段告诉我消息的“质量”。

现在,问题来了 - 我需要获得一些最好的消息。我还需要它们的来源是唯一的。这是我想出的,它应该有效(但事实并非如此)

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

当我这样做时,我得到的结果完全困惑。它根本没有排序。这只是随机的。我错过了什么吗?

最佳答案

您获得的结果未排序,因为您在 $group 阶段之后没有对其进行排序。您已按趋势对事物进行排序,并在分组时利用这一点来确保只保留趋势分数最高的每种排序的 _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 }
})

关于MongoDB 分组+排序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22773842/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com