2
當我從複合索引的集合的mongo shell中調用ensureIndex時,索引對象中會自動生成ObjectId類型的_id字段。在索引對象的_id字段中調用ensureIndex與索引對象中的_id字段
> db.system.indexes.find();
{ "name" : "_id_", "ns" : "database.coll", "key" : { "_id" : 1 } }
{ "_id" : ObjectId("4ea78d66413e9b6a64c3e941"), "ns" : "database.coll", "key" : { "a.b" : 1, "a.c" : 1 }, "name" : "a.b_1_a.c_1" }
這使得直觀的感覺作爲一個集合中的所有文檔需要一個_id字段(甚至system.indexes吧?),但是當我檢查由嗎啡的ensureIndex呼籲同一集合生成索引*沒有_id屬性*。
看看morphia的源代碼,很明顯它調用的是shell使用的相同代碼,但出於某種原因(無論是創建複合索引還是索引嵌入式文檔或兩者兼有)不同的結果。任何人都可以向我解釋這種行爲嗎?
謝謝,這是正確的 - morphia創建索引的mongod版本是比shell連接的版本更高的版本。 brew安裝了古老的1.6.3,並且mongo命令早些時候在我的$ PATH中打了這個版本。 – jpredham
你走了;) –