我想问学者们
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
中。我应该只是索引它还是有更好的解决方法?我可能不得不重写这个问题才能想到它...