4

我最近开始使用 Mongoose (v.3.2.1),但我遇到了索引问题。

我在我的模式( Schema.path('attr').index(true) )上定义了几个索引,它们没有在数据库中创建。(我在 shell 中运行 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 ] }
});

在这种情况下,不创建“类型”索引。请注意,有时在运行 ensureIndexes() 几次后,它们会被创建。

谢谢!

4

2 回答 2

0

确实,我遇到了同样的问题。

然后我将 ensureindex 调试信息复制到 mongo 终端试一试,命令已发送(就像从 mongoose 控制台显示的那样),但由于 mongo 的问题,创建失败:

{
    "err" : "ns name too long, max size is 128",
    "code" : 10080,
    "n" : 0,
    "connectionId" : 78,
    "ok" : 1
}

然后我给出选项 {name: 'super_index'},然后就完成了。

希望对你有帮助!

于 2014-04-22T09:15:50.680 回答
0

当定义一个 ObjectId 引用另一个集合中的文档的字段时,ref属性的值是模型的字符串名称,而不是模型本身。所以它应该看起来像这样:

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

我有一种感觉,失败的时间正在影响type索引是否创建。

于 2012-10-10T22:18:46.283 回答