複合インデックスのコレクションのmongoシェルからensureIndexを呼び出すと、ObjectIdタイプの_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?)直感的に理にかなって、私は同じコレクションのためのmorphiaのensureIndexの呼び出しによって生成されたインデックスをチェックするとき*なしあり_idプロパティ*。
morphiaのソースコードを見ると、シェルが使用するのと同じコードが呼び出されていることは明らかですが、何らかの理由で(複合インデックスを作成しているか、埋め込みドキュメントのインデックスを作成しているか、異なる結果。誰も私にこの行動を説明することはできますか?
モルフォが作成していたmongodのバージョンは、シェルが接続していたバージョンよりも新しいバージョンでした。 brewは古代の1.6.3をインストールし、mongoコマンドは以前のバージョンの$ PATHにそのバージョンを当てていました。あなたは行く; – jpredham
) –