![](/img/trans.png)
[英]how to change string _id to mongoid to delete record from mongo database
[英]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.