我有一个要从数据库获取用户的订单列表。在每个订单信息列表中,都有一个 match 属性,该属性是一个对象数组(称为匹配顺序)。
假设匹配顺序具有2个属性: id 和 createdAt 。
现在,我想在订单列表中获取所有匹配的订单,按createdAt排序,然后将它们分页到匹配的页面,以限制查询参数。
我的旧解决方案 :查询所有用户的订单列表,然后获取所有匹配的订单,对它们进行排序,最后使用 slice 方法进行分页。
第一次看起来不错,因为我还没有很多订单。
但是现在,我遇到了Mongo的错误:内存排序限制为32MB
-详细的 查找器::执行期间的执行器错误,由::排序操作所使用的RAM超过了最大33554432字节。添加索引,或指定一个较小的限制。
我研究了这个错误,也许我应该为match属性建立索引,但是我认为最大的问题是查询。
有关数据库中的ordes列表的示例:
[{
orderId: 1,
match: [
{ id: 1, createdAt: 1 },
{ id: 2, createdAt: 6 },...]
},
{
orderId: 2,
match: [
{ id: 3, createdAt: 4 },
{ id: 4, createdAt: 3 }, ...]
}
]
==> expected: [ { id: 1, createdAt: 1 }, { id: 4, createdAt: 3 },
{ id: 3, createdAt: 4 },{ id: 2, createdAt: 6 }]