【发布时间】:2015-01-20 17:48:41
【问题描述】:
有没有办法在mongodb中同时按两个字段排序? 因此,假设我们在集合中有以下文档:
{ id: 'name1', last_1: 5, last_2: 2 },
{ id: 'name2', last_1: 1, last_2: 9 },
{ id: 'name3', last_1: 4, last_2: 3 }
我希望它按降序排序,同时检查 last_1 和 last_2,因此结果将是: document2(last_2 中的 9 个)、document1(last_1 中的 5 个)、document3(last_1 中的 4 个)。我还需要知道结果中的哪个字段。 我当前的聚合如下所示:
{ $group:
{ _id: { id: '$name' },
last_1: { $last: '$field1' },
last_2: { $last: '$field2' },
}
},
{ $sort : { /* don't know what to put in here */ } },
{ $limit: some_limit }
UPD:我可能不得不完全删除排序/限制并为此使用一些自定义节点功能,因为看起来我无法仅使用 mongo 来实现它,特别是因为附加要求是列出如果两个字段都大于其他文档,则同一文档两次。
【问题讨论】:
-
在这种情况下,如果没有您自己的输入,几乎不可能分辨出哪个字段应该优先。因此,目前唯一的方法是通过聚合框架为单个排序字段的这些字段分配权重
-
他们都不应该优先,再次,在小组赛之后,我有 5 个文档,两个字段的最后一个值,我希望 mongo 获取所有 10 个值(5 个文档 * 2 个最后values),对它们进行排序并根据排序后的前 5 个值排列这些文档。
-
好吧,您在示例中说 doc 2 应该优先考虑 last_2 因为那是 9 而 doc1 应该优先考虑 last_1 因为那是 5,还是我弄错了?
标签: node.js mongodb sorting mongoose