我正在使用像这样的mongoose架构:
{
numero: {
type: Number,
required: true,
unique: true
},
capacidad: {
type: Number,
required: true
}
}
当我检索集合的文档(使用 Model.find({})
)时,我得到按 _id
排序的文档 .
我的问题是:
-
MongoDB创建了一个处理
unique: true
需求的索引,但它没有将它用作默认排序机制? -
如果我这样做
Model.find({}).sort("numero")
这会使用索引来处理唯一性还是必须为我的查询构建另一个? -
如果我定义自己的索引(schema.index({numero:1}),我是否重复工作?
-
总结一下,维护一个为查询排序的集合的最佳实践是什么?
1 回答
首先让我们记下你正在更具体地讨论Mongoose如何作为MongoDB的中介 . 我的意思是在mongoose模式中定义这样的东西:
实际上意味着(通过使用
unique: true
)你 ARE 在字段numero
上创建一个唯一索引,而index: true
部分是可选的as per the documentation .所以你不需要实际创建另一个索引 .
这也应该使用索引回答你关于
Model.find({}).sort("numero")
的问题 .就最佳实践而言,您应该检查查询数据的方式,并且非常重要的是,您需要了解哪种类型的数据才能确定所需的索引类型 . 例如,如果你有
lat/lng
数据,你可能应该使用Geospatial Index
等 .你也不想因为brings other issues as well而对索引感到疯狂 .
查看MongoDB正在做什么的非常重要的工具是explain operator,它为您提供有关查询计划的信息 .
您应该经常使用它来分析和优化您的查询,并找出瓶颈所在 .
您还可以通过以下方式查看收集统计信息
这将为您提供关于集合大小等当前索引的良好信息 .
希望这可以帮助 .