簡體   English   中英

要在mongo中進行有效排序,是否需要更改_id字段?

[英]To have efficient sorting in mongo is it necessary to change the _id field?

我有一個只有大約200個元素的文檔。 但是我通過查詢它仍然得到一個非常緩慢的響應:

Product.order_by([:name, :asc]).limit(20)

我確實有一個名稱的索引,我已經驗證存在於mongo shell中。 是有效返回有效排序結果的唯一方法是將它們的值改為類似的值

"#{name}_#{random_id}"

簡短回答:絕對沒有。 答案很長:讓我們確保查詢正在使用您的索引(而不僅僅是索引存在)。

我們的查詢:

這不使用索引(在這種情況下,因為它不存在)

db.products.find().sort( { name: -1}).explain()
{
    "cursor" : "BasicCursor",
    "nscanned" : 1042,
    "nscannedObjects" : 1042,
    "n" : 1042,
    "scanAndOrder" : true,
    "millis" : 5,
    "nYields" : 0,
    "nChunkSkips" : 0,
    "isMultiKey" : false,
    "indexOnly" : false,
    "indexBounds" : {
        }

讓我們來證明一下

db.products.getIndexes()
[
    {
        "name" : "_id_",
        "ns" : "project_development.products",
        "key" : {
            "_id" : 1
        }
    }
]

創建索引

db.products.ensureIndex({name:1});

現在,當我們解釋查詢時:

db.products.find().sort( { name: -1}).explain()
{
    "cursor" : "BtreeCursor name reverse",
    "nscanned" : 1042,
    "nscannedObjects" : 1042,
    "n" : 1042,
    "millis" : 2,
    "nYields" : 0,
    "nChunkSkips" : 0,
    "isMultiKey" : false,
    "indexOnly" : false,
    "indexBounds" : {
        "name" : [
            [
                {
                    "$maxElement" : 1
                },
                {
                    "$minElement" : 1
                }
            ]
        ]
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM