首页 > 解决方案 > MongoDB - 在聚合中使用 numericOrdering do mongo slow

问题描述

我有这个问题,当我正常运行查询时,一切都 100% 完美,但是当我尝试添加numericOrdering它时不会。

aggregation = [
    {'$match': {'store': 'fourcom', 'closed': 0}}, 
    {'$lookup': {
        'from': 'ordre_open', 
        'localField': 'reference_number', 
        'foreignField': 'order_number', 
        'as': 'ordre_open'
    }}, 
    {'$lookup': {
        'from': 'ordre_backend_open', 
        'localField': 'reference_number', 
        'foreignField': 'ordre-id', 
        'as': 'ordre_backend'
    }}, 
    {'$project': {
        '_id': 1, 
        'store': 1, 
        'order_number': 1, 
        'document_number': 1, 
        'reference_number': 1, 
        'document_date': 1, 
        'invoice_group': 1, 
        'account': 1, 
        'name': 1, 
        'our_ref': 1, 
        'your_ref': 1, 
        'payment': 1, 
        'vat': 1, 
        'total_price': 1, 
        'currency': 1, 
        'department': 1, 
        'closed': 1, 
        'deleted': 1, 
        'arch': 1, 
        'locations': 1, 
        'lines.price': 1, 
        'lines.qty': 1, 
        'ordre_open._id': 1, 
        'ordre_open.order_number': 1, 
        'ordre_open.closed': 1, 
        'ordre_open.deleted': 1, 
        'ordre_open.type': 1, 
        'ordre_open.arch': 1, 
        'ordre_open.fcomputer_synced': 1, 
        'ordre_backend.ordre-id': 1, 
        'ordre_backend.error': 1, 
        'ordre_backend.done': 1, 
        'ordre_backend.cancel': 1
    }}, 
    {'$sort': {'order_number': 1}}, 
    {'$skip': 0}, 
    {'$limit': 1000}
]
mongodb_limit = 1000

resualt = db.command('aggregate', 'ordre_purchase_open', pipeline=aggregation, explain=False, cursor={
                'batchSize': mongodb_limit
            })

但是当我决定像我们人类一样进行排序并添加

collation={
    'numericOrdering': True,
    'locale': "da"
}

它完全出错了,我的查询失败了,不会像我预期的那样工作。我以前用过numericOrdering很多次,但这次是第一次db.command使用aggregate

我希望有人能解释我在这里做错了什么?

标签: pythonmongodbpymongo

解决方案


推荐阅读