Executando a versão mais recente do Node.js no macOS. Também executando a versão mais recente do Mongoose.
Vendo Error: cyclic dependency detected
literalmente sem nenhuma maneira de depurar. Tudo aponta de volta para o Mangusto. Alguma sugestão? Começou a acontecer hoje.
/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)
Qual foi o problema original aqui?
Tente incluir o campo que precisa ser atualizado em vez do objeto inteiro.
Eu também tenho esse problema, mesma linha de código.
C: \ Users \ Rowan \ Onedrive \ code \ react \ gradeable \ frontendnode_modules \ mongoose \ lib \ utils.js: 417
jogue err;
@ nparsons08 Ping. Você pode nos dizer se acabou sendo um problema para você, se você encontrou uma solução alternativa (além de fazer o downgrade para uma versão anterior do mangusto) ou se resolveu de outra maneira?
O mesmo aqui e absolutamente nenhuma maneira de rastrear.
O erro vem e vai.
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)
Atualmente com o mesmo problema. Alguma ideia de como resolver isso.
Bloquear isso porque "Atualmente com o mesmo problema" é muito vago para ser acionado. Abra um novo problema e siga o modelo de problema.
pessoal, acho que encontrei a causa - aparentemente está relacionado ao mongodb 3.6 (recentemente atualizei do 3.2 para o 3.6 e o mongoose foi atualizado para o 5.x também) ...
então eu não conseguia mais executar meu aplicativo, estava recebendo esses erros de dependência cíclica ... a única solução que funcionou para mim foi adicionar autoIndex: false
em mongoose.connect
- mas fazendo portanto, meus índices não estavam mais sendo criados, mesmo depois de usar ensureIndex()
posteriormente no aplicativo - isso acabaria resultando nos mesmos erros de dependência cíclica.
Resumindo, eu consegui consertar removendo todos os atributos INDEX de dentro dos meus modelos e anexando-os ao modelo depois, assim:
antes
client: { type: ObjectId, ref: 'tsCli', required: true, index: true },
depois de
client: { type: ObjectId, ref: 'tsCli', required: true },
[...]
Schema.index({ client: 1 });
E, mais importante, remover o atributo INDEX dos índices compostos, ou seja:
antes
Schema.index({ client: 1, code: 1 }, { unique: true, index: true, partialFilterExpression: { code: { $type: String } } });
depois de
Schema.index({ client: 1, code: 1 }, { unique: true, partialFilterExpression: { code: { $type: String } } });
espero que isso ajude outros
Felicidades
Estou encontrando esse problema especificamente ao tentar adicionar índice em uma matriz:
...
tags: {
type: [String],
index: true
}
...
Simplesmente adicionar esse prop / índice ao meu esquema está causando esse problema
ei @AndrewBarba .. tente adicionar o índice como mencionei, não no campo, mas no esquema e veja se funciona
@gustvao Na verdade, tentei primeiro, sem sorte :(
@AndrewBarba Eu tive esse mesmo problema. Usando o MongoClient, tive que usar:
Collection.createIndexes([
{
key: { email: 1 },
name: 'user_email',
unique: true
}
])
Espero que isto ajude.
Acontece comigo quando tento adicionar um índice de texto:
/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)
Criar um índice de texto em meu campo dá esse erro. Código:
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
nó - 9.11.1
mangusto - 5.1.1 (mesmo com 5.0.8)
MongoDB - 3.6.2
Pode ser interessante notar, eu estava usando a estrutura mongodb+srv://
uri com algumas opções:
mongodb+srv://user:[email protected]?readPreference=primaryPreferred&retryWrites=true
Depois de remover as opções de uri, o problema foi embora sem nenhuma outra alteração de código:
mongodb+srv://user:[email protected]
Pode confirmar - remover retryWrites
fez o problema desaparecer, mesmo com o "antigo" mongodb://
URI.
Olá @ vkarpov15 ,
Qual é o impacto da remoção de retryWrites para o Atlas, isso é algo que o mangusto está fazendo internamente?
Abro este problema sobre retryWrites
https://github.com/Automattic/mongoose/issues/6469 (depois fechou .. pensei que estava resolvido)
Saudações,
Tarek
Oi
Também estou recebendo este erro após atualizar para a versão mais recente do mongoose. Não estou criando nenhum índice em nenhum dos meus esquemas. Agora meu aplicativo é tão grande que não consigo descobrir qual código está causando esse problema. No mangusto ^ 4.13.1 está funcionando bem.
/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/lib/utils.js:429
jogue err;
^
Erro: dependência cíclica detectada
em serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:331:34)
em serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
em serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
em serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
em serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
em serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
em serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
em serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
em serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
em serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
em serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
em serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
em serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
em serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
em serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
em serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
em serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
em serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
em serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
em serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:724:17)
em serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
em serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
em BSON.serialize (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/bson.js:63:28)
em Query.toBin (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/connection/commands.js:144:25)
em serializeCommands (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:1053:43)
em Pool.write (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:1269:3)
em executeWrite (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:80:10)
em WireProtocol.insert (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:91:3)
app [nodemon] travou - aguardando alterações no arquivo antes de iniciar ...
Irá investigar e verificar se a ativação de retryWrites
causa esta falha.
Posso confirmar que remover &retryWrites=true
do URI de conexão corrige o erro
Confirmado! remover &retryWrites=true
trully corrige o erro
Funciona no Atlas: cluster MongoDB sem ?retryWrites=true
O script abaixo funciona bem para mim localmente e no Atlas. Modifique o script abaixo para reproduzir este problema:
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
Modifique o script abaixo para reproduzir este problema:
`` `const assert = require ('assert');
const mongoose = require ('mongoose');
mongoose.set ('debug', true);
const {Schema} = mangusto;
run (). then (() => console.log ('feito')). catch (error => console.error (error.stack));
função assíncrona run () {
esperar mongoose.connect ('mongodb + srv: // usuário: [email protected]/test? retryWrites = true', {dbName: 'db-name'});
const M = mongoose.model ('Teste', novo Esquema ({nome: {tipo: String, único: verdadeiro}}));
aguardar M.create ({nome: 'teste'});
console.log (aguarda M.findOne ());
}
`` `
Com este código de @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());
}
Recebi o seguinte erro: Error: cyclic dependency detected
A única maneira que encontrei de manter retryWrites
é usando a função createIndexes
da API mongodb:
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());
}
Portanto, estamos removendo unique
, index
das definições do modelo Mongoose e criando todos os índices usando createIndexes (https://docs.mongodb.com/manual/reference/command/createIndexes/)
Também tive esse problema ao atualizar do Mongoose 4.11.7 para o 5.1.4. Tentei remover ?retryWrites=true
do meu URI de conexão, sem sorte. Finalmente descobri que estava usando index:true
em uma propriedade _id
como esta:
_id: {
type: String,
required: true,
index: true
}
Remover index:true
corrigiu o problema para mim. Também foi encontrado esse problema que menciona a solução: https://github.com/Automattic/mongoose/issues/2303. Apenas postar, caso outra pessoa tenha o mesmo problema.
Para mim, encontrei esse problema ao ter retryWrites=true
em minha string de conexão e Schema.index({ someKey: 1 })
em meu modelo.
No shell mongo, a execução de db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
retornou { "featureCompatibilityVersion" : { "version" : "3.6" } }
.
Então eu fiz downgrade de featureCompatibilityVersion
para 3.4
do mongodb executando db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
no shell do mongo e executei meu aplicativo novamente com retryWrites=true
e Schema.index({ someKey: 1 })
as Mencionado acima.
Depois de garantir que o índice foi criado com êxito, atualizei featureCompatibilityVersion
para 3.6
do mongodb executando db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
e, em seguida, executei meu aplicativo novamente. O erro de dependência cíclica não apareceu mais.
Encontrou o problema. Não tem nada a ver com Atlas, ou retryWrites
, ou featureCompatibilityVersion
. Tem tudo a ver com a tentativa de criar um índice em _id
. Roteiro de reprodução mínimo:
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());
}
Irá abrir um PR no driver mongodb para isso
nice @ vkarpov15
@ vkarpov15 💪
Consertei o meu removendo retryWrites querystring da string de conexão.
antes
mongodb: // sa :
depois de
mongodb: // sa :
espero que isto ajude.
Tente remover quaisquer índices que você tenha em _id
@otisidev . Portanto, se você tiver algo como new Schema({ _id: {type: String, index: true} })
ou schema.index({ _id: 1 })
, remova-o.
@ vkarpov15 Acho que pode haver dois problemas aqui. Não tenho nenhum índice em _id
em nenhum lugar do meu projeto e ainda estava vendo esse erro até remover ?retryWrites
do URI. Vou fazer um projeto que mostra isso. Independentemente disso, isso realmente parece ser um problema com o driver mongodb e não com o Mongoose
@ vkarpov15 Aqui está um script que produz esse problema sem nenhum índice em _id
:
Mongoose: v5.1.5
Nó: 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()
Definindo um campo de índice para:
index: { type: 'hashed', unique: true }
Também sempre aciona esse problema
Sim, este parece ser um problema legítimo - eu fiz a varredura em minha base de código em busca de índices ruins e ainda parece ocorrer novamente. Baixado para 5.1.0
e parece funcionar bem.
Links para https://github.com/Automattic/mongoose/issues/6469 - mais algumas etapas de reprodução.
Eu vi o bug.
_email_ : {
tipo: String,
obrigatório: verdadeiro,
_ único: verdadeiro _
},
.......
credentialSchema.index ({ _email_ : 1, domínio: 1, ipAddress: 1, senha: -1});
Tive que remover o original da definição do modelo.
@AndrewBarba obrigado pela reprodução, encontrei outro problema como node-mongodb-native # 1740, consulte https://github.com/mongodb/node-mongodb-native/pull/1758 . Esta correção terminará no mongoose assim que uma nova versão do driver mongodb for lançada.
Eu encontrei o mesmo problema ao usar o atlas, mas tudo estava bem localmente. Uma solução rápida para isso, como alguém sugeriu, é remover o parâmetro ?retryWrites=true
, e agora está tudo bem.
Deve ser corrigido em 5.1.8
Tive alguns problemas com MongoDB Atlas e GridStore, a operação de gravação não estava funcionando até que removi "retryWrites = true".
Comentários muito úteis
Pode confirmar - remover
retryWrites
fez o problema desaparecer, mesmo com o "antigo"mongodb://
URI.