4

最近、Mongoose(v.3.2.1)を使い始めましたが、インデックスに問題があります。

スキーマにいくつかのインデックス(Schema.path('attr')。index(true))を定義しましたが、それらはDBに作成されていません。(シェルでdb.collection.getIndexKeys()を実行すると、_idインデックスのみが表示されます)。

一部/すべてのインデックスが作成される場合があることに注意してください。

デバッグをオンにすると、ensureIndex()が実行されているのがわかります。

mongoose.set('debug', true);

Mongoose: myColl.ensureIndex({ type: 1 }) { safe: true, background: true }  
Mongoose: myColl.ensureIndex({ created: 1 }) { safe: true, background: true }  
Mongoose: myColl.ensureIndex({ updated: 1 }) { safe: true, background: true }  

エラーも聞きました:

mongoose.connection.on('error', function(err) {
    console.error('MongoDB error: %s', err);
});

myCollModel.on('index',function(err) {
    console.error('MongoDB error: %s', err);
});

コンソールに挿入とクエリが表示されますが、エラーはありません。

どんな助けでも大歓迎です!

ありがとう、

ニッツァンバー

私のスキーマは次のように定義されています。

myColl = new Schema();

myColl.add({
     text : { type: String, required : true }
   , shortText: { type: String }
   , type : { type: String , index: true}
   , correctAnswerId : { type: ObjectId, ref: QuestionAnswer}
   , answers: { type: [ QuestionAnswer ] }
});

この場合、「type」インデックスは作成されません。時々、ensureIndexes()を数回実行した後、それらが作成されることに注意してください。

ありがとう!

4

2 に答える 2

0

別のコレクション内のドキュメントへの ObjectId 参照であるフィールドを定義する場合、ref属性の値はモデル自体ではなく、モデルの文字列名になります。したがって、代わりに次のようになります。

correctAnswerId : { type: ObjectId, ref: 'QuestionAnswer' }

typeその失敗のタイミングがインデックスを作るかどうかに影響している気がします。

于 2012-10-10T22:18:46.283 に答える