我想先设置两个索引,也许是第三个,但我想知道我如何测试它们是否真的工作?我需要使用mongo shell还是有办法在开发过程中使用Node.js进行检查?我还看到了一个在mongoDb Compass中创建索引的示例。我正在使用mongoDb Atlas,所以想知道我是否必须在Compass中设置索引,或者我仍然需要在mongoose模式中设置索引?
另外,mongoose文档说你应该把autoIndex设置为false。下面的内容正确吗?
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const userSchema = new Schema({
firstName: {
type: String,
},
lastName: {
type: String,
},
});
userSchema.set("autoIndex", false);
userSchema.index({ firstName: 1, lastName: 1 });
module.exports = mongoose.model("User", userSchema);
1条答案
按热度按时间62lalag41#
这里有一堆不同的问题,让我们看看我们是否能按顺序解决它们。
我现在想设置两个索引,也许是第三个
这不是你的问题,而是我的问题。你考虑的索引是什么,你将运行什么查询?
我这样问的原因是因为我只看到问题中提供了一个索引定义(
{ firstName: 1, lastName: 1 }
),而没有查询。通常索引是专门为支持查询而设计的,因此确保成功的索引策略的第一步是确保它们与预期的工作负载适当地匹配。我如何测试它们是否真的在工作?我需要使用mongo shell吗?或者在开发过程中有没有办法使用Node.js来检查?
有几种方法可以解决这个问题,包括:
explain()
method来确认winningPlan
是否按预期使用索引。这通常通过MongoDB Shell或Compass来完成。$indexStats
聚合阶段来确认索引的使用情况计数器在应用程序运行时是否按预期递增。我正在使用mongoDb Atlas,所以想知道我是否必须在Compass中设置索引,或者我仍然需要在mongoose模式中设置索引?
您可以使用Compass(或Atlas UI,或MongoDBShell)来创建索引。我建议不要直接在应用程序中这样做。
另外,mongoose文档说你应该把autoIndex设置为false。下面的内容正确吗?
如上所述,我将进一步从应用程序代码中完全删除索引创建。让应用程序直接负责索引管理可能会有一些意想不到的副作用,这也是Mongoose不再推荐使用
autoIndex
功能的原因之一。