Mongoose: Erreur: dépendance cyclique détectée

Créé le 8 févr. 2018  ·  40Commentaires  ·  Source: Automattic/mongoose

Exécution de la dernière version de Node.js sur macOS. Exécution également de la dernière version de Mongoose.

Voir Error: cyclic dependency detected avec littéralement aucun moyen de déboguer. Tout renvoie à Mongoose. Aucune suggestion? Commencé à se produire aujourd'hui.

/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

Commentaire le plus utile

Peut confirmer - la suppression de retryWrites fait disparaître le problème, même avec l '"ancien" mongodb:// URI.

Tous les 40 commentaires

Quel était le problème original ici?

Essayez d'inclure le champ qui doit être mis à jour au lieu de l'objet entier.

J'ai aussi ce problème, même ligne de code.
C: \ Users \ Rowan \ Onedrive \ code \ react \ gradeable \ frontendnode_modules \ mongoose \ lib \ utils.js: 417
jeter err;

@ nparsons08 Ping. Pouvez-vous nous dire si cela s'est avéré être un problème de votre côté, vous avez trouvé une solution de contournement (en plus de passer à une version précédente de mangouste), ou vous l'avez résolu d'une autre manière?

Même chose ici et absolument aucun moyen de traquer.

L'erreur va et vient.

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)

Je rencontre actuellement le même problème. Aucune idée pour résoudre ça.

Verrouiller cette option car "Vous rencontrez actuellement le même problème" est trop vague pour être exploitable. Veuillez ouvrir un nouveau problème et suivre le modèle de problème.

les gars, je suppose que j'ai trouvé la cause - apparemment, c'est lié à mongodb 3.6 (j'ai récemment mis à niveau de 3.2 à 3.6 et mangouste a également été mis à niveau vers 5.x) ...

donc je ne pouvais plus exécuter mon application, j'obtenais ces erreurs de dépendance cycliques ... la seule solution qui fonctionnait pour moi était d'ajouter autoIndex: false dans mongoose.connect - mais en faisant donc mes index n'étaient plus créés même après avoir utilisé ensureIndex() plus tard sur l'application - cela entraînerait finalement les mêmes erreurs de dépendance cycliques.

En bref, j'ai réussi à résoudre ce problème en supprimant tous les attributs INDEX de l'intérieur de mes modèles et en les ajoutant au modèle par la suite, comme ceci:

avant

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

après

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

ET, plus important encore, supprimer l'attribut INDEX des index composés, c'est-à-dire:

avant

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

après

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

j'espère que cela aide les autres
à votre santé

Je rencontre spécifiquement ce problème lorsque je tente d'ajouter un index sur un tableau:

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

Le simple ajout de cet accessoire / index à mon schéma est à l'origine de ce problème

hey @AndrewBarba .. essayez d'ajouter l'index comme je l'ai mentionné, pas sur le terrain mais sur le schéma et voyez si cela fonctionne

@gustvao J'ai essayé cela en premier, pas de chance :(

@AndrewBarba J'ai eu ce même problème. En utilisant MongoClient, j'ai dû utiliser:

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

J'espère que cela t'aides.

Cela m'arrive lorsque j'essaye d'ajouter un index de texte:

/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)

La création d'un index de texte sur mon champ donne cette erreur. Code:

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œud - 9.11.1
mangouste - 5.1.1 (idem avec 5.0.8)
MongoDB - 3.6.2

Cela vaut peut-être la peine de noter que j'utilisais la structure mongodb+srv:// uri avec quelques options:

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

Une fois que j'ai supprimé les options uri, le problème a disparu sans aucune autre modification de code:

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

Peut confirmer - la suppression de retryWrites fait disparaître le problème, même avec l '"ancien" mongodb:// URI.

Salut @ vkarpov15 ,

Quel est l'impact de la suppression de retryWrites pour Atlas, est-ce quelque chose que mangouste fait en interne?

J'ouvre ce numéro à propos de retryWrites
https://github.com/Automattic/mongoose/issues/6469 (puis l'a fermé .. pensait qu'il était résolu)

Cordialement,
Tarek

salut
J'obtiens également cette erreur après la mise à jour vers la dernière version de mangouste. Je ne crée aucun index dans aucun de mes schémas. Maintenant, mon application est si grande que je ne suis pas en mesure de savoir quel code est à l'origine de ce problème.Sur mongoose ^ 4.13.1 fonctionne très bien.
/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/lib/utils.js:429
jeter err;
^

Erreur: dépendance cyclique détectée
à 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)
sur WireProtocol.insert (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:91:3)
L'application [nodemon] a planté - attente des modifications de fichier avant de démarrer ...

Va enquêter et vérifier si l'activation de retryWrites provoque ce plantage.

Je peux confirmer que la suppression de &retryWrites=true de l'URI de connexion corrige l'erreur

Confirmé! la suppression de &retryWrites=true corrige vraiment l'erreur

Fonctionne sur Atlas: cluster MongoDB sans ?retryWrites=true

Le script ci-dessous fonctionne bien pour moi à la fois localement et contre Atlas. Veuillez modifier le script ci-dessous pour reproduire ce problème:

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

Veuillez modifier le script ci-dessous pour reproduire ce problème:

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

const {Schema} = mangouste;

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

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

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

attendre M.create ({nom: 'test'});
console.log (attendez M.findOne ());
}
''

Avec ce code 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());
}

J'ai eu l'erreur suivante: Error: cyclic dependency detected

Le seul moyen que j'ai trouvé pour maintenir le retryWrites est d'utiliser la fonction createIndexes de l'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());
}

Nous supprimons donc unique , index des définitions de modèle Mongoose et créons tous les index à l'aide de createIndexes (https://docs.mongodb.com/manual/reference/command/createIndexes/)

J'ai rencontré ce problème ainsi que la mise à jour de Mongoose 4.11.7 à 5.1.4. J'ai essayé de supprimer ?retryWrites=true de mon URI de connexion, pas de chance. Enfin, j'ai compris que j'utilisais index:true sur une propriété _id comme celle-ci:

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

La suppression de index:true résolu le problème pour moi. J'ai également trouvé ce problème qui mentionne la solution: https://github.com/Automattic/mongoose/issues/2303. Le simple fait de publier au cas où quelqu'un d'autre rencontre le même problème.

Pour moi, j'ai rencontré ce problème en ayant retryWrites=true dans ma chaîne de connexion et Schema.index({ someKey: 1 }) dans mon modèle.

Dans mongo shell, l'exécution de db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } ) retournait { "featureCompatibilityVersion" : { "version" : "3.6" } } .

Ensuite, j'ai rétrogradé le featureCompatibilityVersion à 3.4 de mongodb en exécutant db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } ) dans le shell mongo et j'ai à nouveau exécuté mon application avec retryWrites=true et Schema.index({ someKey: 1 }) comme mentionné ci-dessus.

Après m'être assuré que l'index avait été créé avec succès, j'ai mis à niveau le featureCompatibilityVersion en 3.6 de mongodb en exécutant db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } ) , puis j'ai réexécuté mon application. L'erreur de dépendance cyclique n'apparaissait plus.

J'ai trouvé le problème. Cela n'a rien à voir avec Atlas, ou retryWrites , ou featureCompatibilityVersion . Cela a tout à voir avec la tentative de créer un index sur _id . Script de repro minimal:

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());
}

Va ouvrir un PR dans le pilote mongodb pour cela

gentil @ vkarpov15

@ vkarpov15 💪

J'ai corrigé le mien en supprimant la chaîne de requête retryWrites de la chaîne de connexion.

avant
mongodb: // sa :@ cluster0-shard-00-00-ljpyb.mongodb. net: 27017 , cluster0-shard-00-01-ljpyb.mongodb. net: 27017 , cluster0-shard-00-02-ljpyb.mongodb. net: 27017 / test? ssl = true & replicaSet = Cluster0-shard-0 & authSource = admin & retryWrites = true

après
mongodb: // sa :@ cluster0-shard-00-00-ljpyb.mongodb. net: 27017 , cluster0-shard-00-01-ljpyb.mongodb. net: 27017 , cluster0-shard-00-02-ljpyb.mongodb. net: 27017 / test? ssl = true & replicaSet = Cluster0-shard-0 & authSource = admin

J'espère que cela t'aides.

Essayez de supprimer tous les index que vous avez sur _id @otisidev . Donc, si vous avez quelque chose comme new Schema({ _id: {type: String, index: true} }) ou schema.index({ _id: 1 }) , supprimez-le.

@ vkarpov15 Je pense qu'il peut y avoir deux problèmes ici. Je n'ai aucun index sur _id n'importe où dans mon projet et je voyais toujours cette erreur jusqu'à ce que je supprime ?retryWrites de l'URI. Je vais faire un projet qui le montre. Quoi qu'il en soit, cela semble vraiment être un problème avec le pilote mongodb et non avec Mongoose

@ vkarpov15 Voici un script qui produit ce problème sans aucun index sur _id :

Mangouste: v5.1.5
Nœud: 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()

Définition d'un champ d'index sur:

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

Déclenche également toujours ce problème

Ouais, cela semble être un problème légitime - j'ai scanné ma base de code pour les mauvais index et cela semble toujours se reproduire. Rétrogradé à 5.1.0 et cela semble fonctionner correctement.

Liens vers https://github.com/Automattic/mongoose/issues/6469 - quelques étapes de repro supplémentaires.

J'ai vu le bogue.

_email_ : {
type: Chaîne,
requis: vrai,
_ unique: vrai _
},
.......

credentialSchema.index ({ _email_ : 1, domaine: 1, ipAddress: 1, mot de passe: -1});

J'ai dû supprimer unique de la définition du modèle.

@AndrewBarba merci pour la repro, j'ai trouvé un autre problème comme node-mongodb-native # 1740, voir https://github.com/mongodb/node-mongodb-native/pull/1758 . Ce correctif se retrouvera dans mangouste une fois qu'une nouvelle version du pilote mongodb sera publiée.

J'ai rencontré le même problème lors de l'utilisation d'atlas, mais tout allait bien localement. Une solution rapide autour de cela, comme quelqu'un l'a suggéré, consiste à supprimer le paramètre ?retryWrites=true , et maintenant tout va bien.

Doit être corrigé dans 5.1.8

J'ai eu un problème avec MongoDB Atlas et GridStore, l'opération d'écriture ne fonctionnait pas jusqu'à ce que je supprime "retryWrites = true".

Cette page vous a été utile?
0 / 5 - 0 notes