当前位置: 首页 > 面试题库 >

生产代码中的猫鼬索引

子车雅珺
2023-03-14
问题内容

根据Mongoose
文档中关于MongooseJSMongoDB/的内容Node.js

当您的应用程序启动时,Mongoose会自动调用ensureIndex架构中每个已定义的索引。虽然有利于开发,但建议在生产中禁用此行为,因为创建索引会严重影响性能。通过将autoIndex架构选项设置为false来禁用该行为。

这似乎指示从Mongoose删除自动索引,然后再部署以优化Mongoose,而从指示Mongo在应用程序启动时遍历所有索引开始,这似乎是有道理的。

在生产代码中处理索引的正确方法是什么?也许外部脚本应该生成索引?或者,ensureIndex如果单个应用程序是集合的唯一读取器/写入器,也许是不必要的,因为每当发生DB写操作时,该应用程序都会继续执行索引?

编辑:
补充,MongoDB中提供了良好的文档对 如何 做索引,但不 为什么 还是
明确索引指令应该做的。在我看来,编写应用程序应在具有现有索引的集合上自动使索引保持最新状态,这ensureIndex实际上是一次性的事情(在应用新索引时完成),在这种情况下,猫鼬autoIndex应该是在正常服务器重启下无操作。


问题答案:

我从未理解过为什么Mongoose文档如此广泛地建议禁用autoIndex生产。一旦添加了索引,随后的ensureIndex调用将简单地看到该索引已经存在,然后html" target="_blank">返回。因此,它仅在首次创建索引时才对性能产生影响,并且那时集合通常是空的,因此无论如何创建索引都会很快。

我的建议是保持autoIndex启用状态,除非您遇到特殊情况会给您带来麻烦。例如,如果您想向具有数百万个文档的现有集合中添加新索引,并且希望对其创建时间进行更多控制。



 类似资料:
  • 问题内容: 我正在寻找一种使用mongoose将帐户保存到MongoDB的好方法。 我的问题是:密码是异步哈希的。设置器将无法在这里工作,因为它只能同步工作。 我考虑了两种方法: 创建模型的实例,并将其保存在哈希函数的回调中。 在“保存”上创建一个预钩子 这个问题有什么好的解决办法吗? 问题答案: mongodb博客上有一篇很棒的文章,详细介绍了如何实现用户身份验证。 http://blog.mo

  • 问题内容: 我正在尝试将我的猫鼬方案插入到mongoosastic的elasticsearch中,但这给了我 我的猫鼬模式: 我可以卷曲到Elasticsearch服务器,所以那里没有问题 问题答案: 通过将我的IP传递给数组来修复它 一定是虫龙

  • 问题内容: 我想用Mongoose 生成一个MongoDB 。有没有办法从Mongoose 访问构造函数? 这个问题是关于从头开始 产生新的 。生成的ID是全新的通用唯一ID。 另一个问题是关于从 现有的字符串表示形式 创建一个。在这种情况下,您已经具有ID的字符串表示形式(它可能是通用的也可能不是唯一的),并且正在将其解析为。 问题答案: 您可以在找到构造函数。这是一个例子: 是一个新生成的。

  • 问题内容: 我试图让MongoDB根据其索引检测重复值。我认为这在MongoDB中是可能的,但是通过Mongoose包装器,事情似乎被打破了。所以对于这样的事情: 我可以用同一封电子邮件保存2个用户。真是 在这里也表达了同样的问题:https : //github.com/LearnBoost/mongoose/issues/56,但是该线程很旧,导致无处可去。 现在,我正在手动调用数据库以查找用

  • 问题内容: 我有以下情况。我需要基于某些参数构建猫鼬查询。 也就是说,如果通过这样的对象 执行以下搜索: 如果如果动作不在对象中,则需要从搜索中排除“动作”,该怎么办?像这样使用三元运算符不起作用,就像在DB中的is中搜索条目一样。 问题答案: 以编程方式建立查询对象:

  • 问题内容: 我正在使用Restify和Mongoose创建一个API ,而这两个都是我的新手。我似乎无法找出正确的方法来处理Mongoose / Node中的错误。 到目前为止,我正在尝试执行以下操作: 我正在尝试为此调用GET(针对不存在的用户)。而不是发送回简单的错误消息,而是导致整个节点应用程序失败。我对return next(err)的用户以及应该怎么做感到困惑。 任何帮助是极大的赞赏。