gpt4 book ai didi

node.js - Mongodb 按两个字段之一排序

转载 作者:太空宇宙 更新时间:2023-11-04 03:09:32 27 4
gpt4 key购买 nike

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,所以结果是:文档2(last_2 中的 9)、文档 1(last_1 中的 5)、文档 3(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:我可能必须完全删除排序/限制并为此使用一些自定义 Node 函数,因为看起来我无法仅使用 mongo 来实现它,特别是因为额外的要求是如果两个字段都比其他文档中的字段大,则将同一文档列出两次。

最佳答案

也许是这样的,

1

db.test.aggregate([
{$project: {name: 1, field1: 1, field2: 1}},
{$group: {_id: '$name', field_1: { $last: '$field1' }, field_2: { $last: '$field2' }}},
{$project: {name: 1, field_1: 1, field_2: 1, cmp: { $cmp: ['$field_2', '$field_1'] } }},
{$sort: { cmp: -1, field_1: -1, field_2: -1 }}
])

2

db.test.aggregate([
{$project: {name: 1, field1: 1, field2: 1}},
{$group: {_id: '$name', field_1: { $last: '$field1' }, field_2: { $last: '$field2' }}},
{$project: {
name: 1,
field_1: 1,
field_2: 1,
largest: { $cond: [ {$gt: ['$field_2', '$field_1']}, '$field_2', '$field_1'] }
}},
{$sort: { largest: -1 }}
])

关于node.js - Mongodb 按两个字段之一排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27080728/

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