【发布时间】:2019-01-14 09:12:40
【问题描述】:
假设我有以下数据架构(我只报告几个字段)
收集顺序
| id | service | customer |
|-------|---------|----------|
| O001 | SRV001 | CST001 |
| O002 | SRV001 | CST001 |
| O003 | SRV001 | CST002 |
| O004 | SRV002 | CST003 |
| O005 | SRV002 | CST002 |
| O006 | SRV003 | CST004 |
收集客户
| id | name | city |
|--------|---------|----------|
| CST001 | Paul | New York |
| CST002 | Anna | London |
| CST003 | John | Milan |
| CST004 | Julia | Paris |
假设我想根据客户姓名对订单进行排序
这个想法是使用带有 $lookup 的聚合来加入客户对结果进行排序和排序
db.order.aggregate([
{ $lookup: { 'foreignField': 'id',
'as': '__customer',
'from': 'customer',
'localField':'customer'} },
{ $unwind: '$__customer'},
{ $sort: { '__customer.name': 1 } }
])
如果您的数据有限,这可以正常工作。如果您有大量数据,则它不起作用,因为排序是在 $lookup 结果上执行的,因此即使客户集合中的字段“名称”有索引,mongodb 也没有可使用的索引。
我认为没有办法做到这一点。
有人可以确认吗?
【问题讨论】:
标签: mongodb sorting aggregation-framework