我最近开始使用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()几次后会创建它们。
谢谢!
答案 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'}选项,然后就完成了。
希望它对你有所帮助!