【发布时间】:2020-02-07 09:12:06
【问题描述】:
假设我有 tx_collection,其中有 3 个文档,如下所示
{
"block_number": 1,
"value": 122
"transfers": [
{
"from": "foo1",
"to": "bar1",
"amount": 111
},
{
"from": "foo3",
"to": "bar3",
"amount": 11
},
]
},
{
"block_number": 2,
"value": 88
"transfers": [
{
"from": "foo11",
"to": "bar11",
"amount": 33
},
{
"from": "foo22",
"to": "bar22",
"amount": 55
},
]
},
{
"block_number": 3,
"value": 233
"transfers": [
{
"from": "foo1",
"to": "bar1",
"amount": 33
},
{
"from": "foo3",
"to": "bar3",
"amount": 200
},
]
}
针对性能问题,我在transfers.amount上创建了多键索引
当我按transfers.amount排序时,
db.getCollection('tx_transaction').find({}).sort({"transfers.amount":-1})
我期望的文档顺序按子字段transfers.amount 的最大值排序
{
"block_number": 3,
"value": 233
"transfers": [
{
"from": "foo1",
"to": "bar1",
"amount": 33
},
{
"from": "foo3",
"to": "bar3",
"amount": 200
},
]
},
{
"block_number": 1,
"value": 122
"transfers": [
{
"from": "foo1",
"to": "bar1",
"amount": 111
},
{
"from": "foo3",
"to": "bar3",
"amount": 11
},
]
},
{
"block_number": 2,
"value": 88
"transfers": [
{
"from": "foo11",
"to": "bar11",
"amount": 33
},
{
"from": "foo22",
"to": "bar22",
"amount": 55
},
]
}
排序效果很好,因为只有 3 个文档。排序顺序是我期望的块号 3 -> 块号 1 -> block_number 2
我的问题是当有 1900 万个文档时,它会抛出错误消息
按摩是这样的
"errmsg" : "Executor error during find command: OperationFailed: Sort operation used more than the maximum 33554432 bytes of RAM. Add an index, or specify a smaller limit.",
排序的时候好像没有使用多键索引。
您知道为什么会抛出此错误消息吗?
仅供参考。
- 我的mongodb版本是3.6.3
- tx_collection 已分片
【问题讨论】:
标签: mongodb sorting indexing multikey