BSON`_id`与String`id`的MongoDB索引策略?

时间:2018-11-09 18:09:41

标签: mongodb mongoid

我想问学者们

2018-11-09T19:01:39.896+0100 [conn1851] query database.collection 
  query: { 
    $query: { 
      id: "5bb79a18293609212200cbe2" 
    }, 
    $orderby: { 
      _id: 1 
    } 
  } 
planSummary: IXSCAN { _id: 1 } 
ntoskip:0 
nscanned:138476 
nscannedObjects:138476 
keyUpdates:0 
numYields:0 
locks(micros) 
r:127627 
nreturned:1 
reslen:497 
127ms

在我看来,因为我没有用BSON查询_id,所以索引使用不正确。我是否真的必须创建其他索引来根据_id的字符串值id来查询数据库,或者仅仅是类型不匹配还是什么?

这些是我当前拥有的索引

> db.collection.getIndexes()
[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "database.collection"
    },
    {
        "v" : 1,
        "key" : {
            "sport_id" : 1
        },
        "name" : "sport_id_1",
        "ns" : "database.collection"
    },
    {
        "v" : 1,
        "key" : {
            "sport_id" : 1,
            "updated_at" : -1
        },
        "name" : "sport_id_1_updated_at_-1",
        "ns" : "database.collection"
    },
    {
        "v" : 1,
        "key" : {
            "external_ids.id" : 1
        },
        "name" : "external_ids.id_1",
        "ns" : "database.collection"
    }
]

我目前在mongodb 2.6.12上,我认为使用的是mongoid v 2.5。

这是文档外观的一部分:

{ 
  "_id" : ObjectId("593a61de2936093a460004ca"), 
  "sport_id" : ObjectId("592eefe3293609345c000867")
  "id" : "593a61de2936093a460004ca", 
  "created_at" : ISODate("2017-06-09T08:52:46Z") 
}

好像我们所有的文档都在保存_id的字符串表示形式。这只是建模错误而已吧?

我没有造成这种混乱,但是我必须修复它。有什么建议如何进行呢?看来我们出于未知原因将_id复制到id中。我应该只是索引它还是有更好的解决方法?我可能不得不重写这个问题才能想到它...

0 个答案:

没有答案