在为mongodb创建索引时,Node.js应用程序崩溃

时间:2018-05-28 12:34:37

标签: node.js mongodb

当我通过createIndexensureIndex方法创建索引时,我的node.js应用程序崩溃,但未提供任何已发生错误的详细信息。

此外,我注意到我的所有代码都与我的localhost mongodb一起使用,直到我使用远程mongdb atlas副本集。

Node.js:8.5.0 Mongodb:3.6.4 Node.js的Mongodb驱动程序:3.0.8

示例代码(但我尝试了不同的实现变体,没有任何帮助):

db.collection('stars').ensureIndex({name: 1}, { unique: true });

我已经在监听uncaughtExceptionunhandledRejection事件了,但是他们不会发生这次事故。

如何获取详细信息或摆脱此错误?

感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

我将mongodb驱动程序更新为版本3.1.0,并最终收到错误消息,其中描述了导致问题的原因。根据错误消息:“ 字段“ retryWrites”对于索引规范无效”。因此,我认为问题出在此字段中,我曾经将其添加到连接uri字符串中。删除该字段后,我摆脱了这个问题。

答案 1 :(得分:3)

该问题可能与以下问题有关:NODE-1641。我遇到了类似的问题,并找到了一些解决方案:

  • 将驱动程序版本锁定为3.1.0并添加useNewUrlParser:在连接选项中为true。
  • 在createIndex中添加字段retryWrites:null,因此您的情况如下所示: db.collection('stars').ensureIndex({name: 1}, { unique: true, retryWrites: null });

但是,您需要检查它是否不会关闭该集合的可重试写入。

  • 最后的选择是投票解决该问题,希望它会尽快解决,然后更新驱动程序。

答案 2 :(得分:0)

不确定这是否有帮助,但是我目前正在尝试解决此问题。

如果删除{unique:true},则应该可以完成工作,但是如果您再次添加相同的文档,则会生成重复的文档。