猫鼬没有创建索引

时间:2012-10-08 17:46:48

标签: node.js indexing mongoose

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

我在我的架构上定义了几个索引(Schema.path('attr')。index(true))并且它们没有在DB中创建。 (我在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);
});

我可以在控制台中看到我的插入和查询,但没有错误。

任何帮助将不胜感激!

谢谢,

Nitzan Bar

我的架构定义如下:

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()几次后会创建它们。

谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

我觉得失败的时间正在影响是否创建type索引。

答案 1 :(得分: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'}选项,然后就完成了。

希望它对你有所帮助!