MongoDB默认为严格模式
我们有一个nodejs+mongodb应用程序,已经在生产中运行了几年,并且正在多台机器上开发。在一个开发人员的机器上,我看到了错误MongoDB默认为严格模式,mongodb,Mongodb,我们有一个nodejs+mongodb应用程序,已经在生产中运行了几年,并且正在多台机器上开发。在一个开发人员的机器上,我看到了错误 MongoError: collection already exists 研究此错误表明,仅当集合处于严格模式时,在尝试创建现有集合时才会发生此错误。我们不会在应用程序中的任何地方调用mongo的strict模式,我们只能在一台机器上重现此错误 导致此错误的代码如下所示: var mongo = require('mongodb'); mongo.MongoC
MongoError: collection already exists
研究此错误表明,仅当集合处于严格模式时,在尝试创建现有集合时才会发生此错误。我们不会在应用程序中的任何地方调用mongo的strict模式,我们只能在一台机器上重现此错误
导致此错误的代码如下所示:
var mongo = require('mongodb');
mongo.MongoClient.connect(config.mongoConnectionString, {w:1}, function(err, db) {
db.createCollection('accounts', function(err, collection) {
// "err" here is the error message.
});
});
有没有办法覆盖mongo的默认值
strict:false
值?是否存在导致启用严格模式的全局配置选项?我不希望修改代码来为每个集合指定strict:false
,而只是为了启用单个开发人员。开发人员正在运行mongo v3.2您可以使用以下命令禁用“严格”模式
var mongo = require('mongodb');
mongo.MongoClient.connect(config.mongoConnectionString, {w:1}, function(err, db) {
db.createCollection('accounts', {strict:false}, function(err, collection) {
// "err" here is the error message.
});
});
您可以从上面编辑的中了解更多信息。正如我提到的,这段代码已经在登台和生产环境中运行了两年,许多开发人员都能够运行这段代码。似乎只有一台机器有这个问题。如果我们手动绕过此集合的错误,我们会在这台计算机上的所有其他集合中看到相同的错误,这使我相信安装的mongo版本本身有一个配置值,而不是我们的代码有问题。该开发人员是否碰巧也安装了mongoose?@JohnnyHK是一个旧版本。1.2.14@Jaco不确定,让我再检查一下。mongoose会干扰吗?与Node.JS Mongo驱动程序不同,新版本的mongoose默认执行
strict:true
,因此确实想知道mongoose安装是否会干扰mongodb核心库;我不愿意更改在生产环境中运行的稳定代码,以修复只在一个开发人员的机器上发生的问题。这个问题是关于在一台机器上查找导致错误行为的配置,而不是中断所有其他工作配置