Mongoose: 错误:检测到循环依赖性

创建于 2018-02-08  ·  40评论  ·  资料来源: Automattic/mongoose

在macOS上运行最新版本的Node.js。 还运行最新版本的猫鼬。

看到Error: cyclic dependency detected实际上无法调试。 一切都指向猫鼬。 有什么建议? 今天开始发生。

/Users/nickparsons/Code/winds-2.0/api/src/node_modules/mongoose/lib/utils.js:417
        throw err;
        ^

Error: cyclic dependency detected
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:296:33)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:618:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
confirmed-bug underlying library issue

最有用的评论

可以确认-删除retryWrites可以解决问题,即使使用了“旧的” mongodb:// URI。

所有40条评论

这里最初的问题是什么?

尝试包括需要更新的字段,而不是整个对象。

我也有这个问题,同一行代码。
C:\ Users \ Rowan \ Onedrive \ code \ react \ gradable \ frontendnode_modules \ mongoose \ lib \ utils.js:417
犯错

@ nparsons08平。 您能否告诉我们,这最终是否确实是一个问题,您是否找到了解决方法(除了降级到较早的猫鼬版本之外),还是以其他方式解决了它?

同样在这里,绝对没有办法追踪。

错误来来去去。

image

Error: cyclic dependency detected at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:296:33) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:618:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at BSON.serialize (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/bson.js:58:27) at Query.toBin (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/connection/commands.js:141:25) at serializeCommands (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:1050:43) at Pool.write (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:1230:3) at executeWrite (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:80:10) at WireProtocol.insert (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:91:3) at Server.insert (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/server.js:747:35) at executeWriteOperation (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/mongos.js:899:22) at Mongos.insert (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/mongos.js:955:3) at Mongos.insert (/var/www/node_modules/mongoose/node_modules/mongodb/lib/topologies/topology_base.js:315:25) at /var/www/node_modules/mongoose/node_modules/mongodb/lib/db.js:1093:21 at handleCallback (/var/www/node_modules/mongoose/node_modules/mongodb/lib/utils.js:128:55)

当前遇到同样的问题。 任何想法如何解决这个问题。

因为“当前遇到相同的问题”太模糊而无法采取行动,因此将其锁定。 请打开一个新问题,并遵循问题模板。

伙计们,我想我找到了原因-显然与mongodb 3.6有关(我最近从3.2升级到3.6,猫鼬也升级到了5.x)...

所以我再也无法运行我的应用程序了,我得到了这些循环依赖性错误...对我有用的唯一解决方法是将autoIndex: falsemongoose.connect -但是因此,即使稍后在应用程序上使用ensureIndex()之后,也不再创建我的索引-最终会导致相同的循环依赖项错误。

长话短说,我设法通过从模型内部删除所有属性INDEX并将其附加到模型中来解决问题,如下所示:

之前

client: { type: ObjectId, ref: 'tsCli', required: true, index: true },

client: { type: ObjectId, ref: 'tsCli', required: true },
[...]
Schema.index({ client: 1 });

并且,更重要的是,从复合索引中删除属性INDEX,即:

之前

Schema.index({ client: 1, code: 1 }, { unique: true, index: true, partialFilterExpression: { code: { $type: String } } });

Schema.index({ client: 1, code: 1 }, { unique: true, partialFilterExpression: { code: { $type: String } } });

希望这对别人有帮助
干杯

我在尝试在数组上添加索引时特别遇到了这个问题:

...
tags: {
  type: [String],
  index: true
}
...

只需将prop / index添加到我的架构中就会导致此问题

@AndrewBarba ..尝试像我提到的那样添加索引,而不是在字段上,而是在模式上,看看它是否有效

@gustvao我实际上首先尝试过,没有运气:(

@AndrewBarba我有同样的问题。 使用MongoClient我必须使用:

Collection.createIndexes([
    {
        key: { email: 1 },
        name: 'user_email',
        unique: true
    }
])

希望这可以帮助。

尝试添加文本索引时发生在我身上:

/Users/ashish/dictionary/js_server/node_modules/mongoose/lib/utils.js:429
        throw err;
        ^

Error: cyclic dependency detected
    at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:331:34)
    at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
    at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
    at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
    at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
    at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
    at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
    at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
    at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
    at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
    at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
    at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
    at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
    at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
    at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
    at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
Emitted 'error' event at:
    at done (/Users/ashish/dictionary/js_server/node_modules/mongoose/lib/model.js:1051:13)
    at /Users/ashish/dictionary/js_server/node_modules/mongoose/lib/model.js:1093:16
    at /Users/ashish/dictionary/js_server/node_modules/mongoose/lib/utils.js:424:16
    at err (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:415:14)
    at session.endSession (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:399:27)
    at ClientSession.endSession (/Users/ashish/dictionary/js_server/node_modules/mongodb-core/lib/sessions.js:72:41)
    at executeCallback (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:397:17)
    at err (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:415:14)
    at executeCallback (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:404:25)
    at err (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:415:14)
    at executeCallback (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:404:25)
    at handleCallback (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:128:55)
    at /Users/ashish/dictionary/js_server/node_modules/mongodb/lib/db.js:1068:25
    at executeWrite (/Users/ashish/dictionary/js_server/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:82:5)
    at WireProtocol.insert (/Users/ashish/dictionary/js_server/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:91:3)
    at Server.insert (/Users/ashish/dictionary/js_server/node_modules/mongodb-core/lib/topologies/server.js:752:35)

在我的字段上创建文本索引会出现此错误。 码:

WordSchema = new Schema({
  title: {
    type: String,
    required: true,
  },
  meanings: [MeaningSchema],
  keys: [String],
  tags: [String],
  language: String,
  createdAt: Date,
  updatedAt: Date
});

WordSchema.index({title: 'text'}); ---> Error
WordSchema.index({title: 1});      ---> Works fine

节点-9.11.1
猫鼬-5.1.1(与5.0.8相同)
MongoDB-3.6.2

可能值得注意的是,我在$$$ mongodb+srv:// uri结构中使用了一些选项:

mongodb+srv://user:[email protected]?readPreference=primaryPreferred&retryWrites=true

一旦删除了uri选项,问题就消失了,而没有任何其他代码更改:

mongodb+srv://user:[email protected]

可以确认-删除retryWrites可以解决问题,即使使用了“旧的” mongodb:// URI。

@ vkarpov15

删除Atlas的retryWrites有什么影响,这是猫鼬在内部进行的操作吗?

我打开有关retryWrites的问题
https://github.com/Automattic/mongoose/issues/6469 (然后将其关闭..以为已解决)

问候,
塔雷克

你好
更新到最新的猫鼬版本后,我也收到此错误。 我没有在任何架构中创建任何索引。 现在我的应用程序太大了,我无法找出导致此问题的代码是什么。在Mongoose ^ 4.13.1上运行良好。
/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/lib/utils.js:429
犯错
^

错误:检测到循环依赖性
在serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:331:34)
在serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
在serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
在serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
在serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
在serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
在serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
在serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
在serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
在serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
在serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
在serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
在serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
在serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
在serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
在serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
在serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
在serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
在serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
在serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:724:17)
在serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
在serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
在BSON.serialize(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/bson.js:63:28)
在Query.toBin(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/connection/commands.js:144:25)
在serializeCommands(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:1053:43)
在Pool.write(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:1269:3)
在executeWrite(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:80:10)
在WireProtocol.insert(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:91:3)
[nodemon]应用程序崩溃-等待文件更改,然后再开始...

将调查并检查是否打开retryWrites会导致此崩溃。

我可以确认从连接URI中删除&retryWrites=true可以修复错误

已确认! 彻底删除&retryWrites=true可修复错误

适用于Atlas:没有?retryWrites=true MongoDB集群

下面的脚本在本地和针对Atlas都适合我。 请修改以下脚本以重现此问题:

const assert = require('assert');
const mongoose = require('mongoose');
mongoose.set('debug', true);

const { Schema } = mongoose;

run().then(() => console.log('done')).catch(error => console.error(error.stack));

async function run() {
  await mongoose.connect('mongodb+srv://user:[email protected]/test?retryWrites=true');

  const M = mongoose.model('Test', new Schema({ name: String }));

  await M.create({ name: 'test' });
  console.log(await M.findOne());
}

@ vkarpov15

请修改以下脚本以重现此问题:

``const assert = require('assert');
const mongoose = require('mongoose');
mongoose.set('debug',true);

const {模式} =猫鼬;

run()。then(()=> console.log('done'))。catch(error => console.error(error.stack));

异步功能run(){
等待mongoose.connect('mongodb + srv:// user:[email protected]/test?retryWrites = true',{dbName:'db-name'});

const M = mongoose.model('Test',new Schema({name:{type:String,unique:true}})));

等待M.create({name:'test'});
console.log(等待M.findOne());
}
```

使用@mykhaliuk的这段代码:

const mongoose = require('mongoose');
mongoose.set('debug', true);

const { Schema } = mongoose;

run().then(() => console.log('done')).catch(error => console.error(error.stack));

async function run() {
  await mongoose.connect('mongodb+srv://user:[email protected]/test?retryWrites=true', {dbName:'db-name'});

  const M = mongoose.model('Test', new Schema({ name: {type: String, unique: true }}));

  await M.create({ name: 'test' });
  console.log(await M.findOne());
}

我收到以下错误: Error: cyclic dependency detected

我发现维护retryWrites的唯一方法是使用mongodb API中的函数createIndexes

const mongoose = require('mongoose');
mongoose.set('debug', true);

const { Schema } = mongoose;

run().then(() => console.log('done')).catch(error => console.error(error.stack));

async function run() {
  await mongoose.connect('mongodb+srv://user:[email protected]/test?retryWrites=true');

  const M = mongoose.model('NewTest', new Schema({ name: {type: String} }));

  M.collection.createIndexes([{key: {name: 1}, name: "name", unique: true}])

  await M.create({ name: 'test' });
  console.log(await M.findOne());
}

所以我们要从猫鼬模型定义中删除uniqueindex并使用createIndexes (https://docs.mongodb.com/manual/reference/command/createIndexes/)创建所有索引

我遇到了这个问题,也从Mongoose 4.11.7升级到5.1.4。 我尝试从我的连接URI中删除?retryWrites=true ,但是不走运。 最终,我发现我正在像这样的自定义_id属性上使用index:true

_id: {
    type: String,
    required: true,
    index: true
  }

删除index:true解决我的问题。 还发现了提到解决方案的问题: https :

对我来说,当我的连接字符串中有retryWrites=true且模型中有Schema.index({ someKey: 1 })时,我遇到了这个问题。

在mongo shell中,执行db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )返回{ "featureCompatibilityVersion" : { "version" : "3.6" } }

然后,我通过在mongo shell中执行db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } ) ,将mongodb的featureCompatibilityVersion降级为3.4 ,并再次使用retryWrites=trueSchema.index({ someKey: 1 })来运行我的应用程序上文提到的。

确保成功创建索引后,我通过执行db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )将mongodb的featureCompatibilityVersion升级到3.6 db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } ) ,然后再次运行我的应用程序。 循环依赖性错误不再出现。

找到了问题。 它与Atlas或retryWritesfeatureCompatibilityVersion无关。 它与尝试在_id上创建索引有关。 最少的复制脚本:

const mongoose = require('mongoose');
mongoose.set('debug', true);

Error.stackTraceLimit = Infinity;

const { Schema } = mongoose;

run().then(() => console.log('done')).catch(error => console.error(error.stack));

async function run() {
  await mongoose.connect('mongodb://localhost:27017/test', {dbName: 'test'});

  const M = mongoose.model('Test', new Schema({ _id: { type: String, index: true } }));

  await M.create({ _id: 'abc' + Math.random() });
  console.log(await M.findOne());
}

为此将在mongodb驱动程序中打开PR

不错@ vkarpov15

@ vkarpov15💪

我通过从连接字符串中删除retryWrites querystring来修复了我的问题。

之前
mongodb:// sa@ cluster0-shard-00-00-ljpyb.mongodb。 网址:27017 ,cluster0-shard-00-01-ljpyb.mongodb。 网址:27017 ,cluster0-shard-00-02-ljpyb.mongodb。 净值:27017 / test?ssl = true&replicaSet = Cluster0-shard-0&authSource = admin& retryWrites = true


mongodb:// sa@ cluster0-shard-00-00-ljpyb.mongodb。 网址:27017 ,cluster0-shard-00-01-ljpyb.mongodb。 网址:27017 ,cluster0-shard-00-02-ljpyb.mongodb。 净值:27017 / test?ssl = true&replicaSet = Cluster0-shard-0&authSource = admin

希望这可以帮助。

尝试删除_id @otisidev上的所有索引。 因此,如果您有类似new Schema({ _id: {type: String, index: true} })schema.index({ _id: 1 })请删除该内容。

@ vkarpov15我认为这里可能有两个问题。 我在项目中的_id上没有任何索引,直到我从URI中删除?retryWrites ,仍然看到此错误。 我将创建一个显示该项目的项目。 无论如何,这似乎确实是mongodb驱动程序而非Mongoose的问题

@ vkarpov15这是一个产生此问题的脚本,在_id上没有任何索引:

猫鼬:v5.1.5
节点:v8.11.3

const mongoose = require('mongoose')
const { Schema } = mongoose

async function run() {
  try {
    await mongoose.connect('mongodb://localhost:27017/test?retryWrites=true', {
      dbName: 'mongoose-issue-6109'
    })

    const Model = mongoose.model('Model', new Schema({
      email: {
        type: String,
        index: {
          unique: true
        }
      }
    }))

    await Model.create({
      email: '[email protected]'
    })

    console.log(await Model.findOne())
  } catch(err) {
    console.error(err)
  }
}

run()

将索引字段设置为:

index: { type: 'hashed', unique: true }

也总是触发此问题

是的,这似乎是一个合法的问题-我已经在我的代码库中扫描了错误的索引,而且它似乎仍然会再次发生。 降级为5.1.0 ,看来工作正常。

链接到https://github.com/Automattic/mongoose/issues/6469-其他一些复制步骤。

我已经看到了错误。

_email _ :{
类型:字符串,
必填:是,
_唯一:正确_
},
.......

credentialSchema.index({_ email_ :1,域:1,ip地址:1,密码:-1});

我不得不从模型定义中删除唯一性。

@AndrewBarba感谢您的复制,我发现了另一个问题,例如node-mongodb-native#1740,请参阅https://github.com/mongodb/node-mongodb-native/pull/1758 。 一旦发布了新版本的mongodb驱动程序,此修复程序将以mongoose结尾。

使用地图集时遇到了相同的问题,但是在本地一切都很好。 正如有人建议的那样,快速解决此问题的方法是删除参数?retryWrites=true ,现在一切正常。

应该在5.1.8中修复

我在MongoDB Atlas和GridStore上遇到了一些问题,直到删除了“ retryWrites = true”,写入操作才起作用。

此页面是否有帮助?
0 / 5 - 0 等级