Mongoose: Fehler: Zyklische Abhängigkeit erkannt

Erstellt am 8. Feb. 2018  ·  40Kommentare  ·  Quelle: Automattic/mongoose

Ausführen der neuesten Version von Node.js unter macOS. Läuft auch die neueste Version von Mongoose.

Sehen von Error: cyclic dependency detected mit buchstäblich keiner Möglichkeit zum Debuggen. Alles deutet auf Mungo zurück. Irgendwelche Vorschläge? Begann heute zu geschehen.

/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

Hilfreichster Kommentar

Kann bestätigen - das Entfernen von retryWrites hat das Problem behoben, selbst mit dem "alten" URI mongodb:// .

Alle 40 Kommentare

Was war die ursprüngliche Ausgabe hier?

Versuchen Sie, das Feld einzuschließen, das anstelle des gesamten Objekts aktualisiert werden muss.

Ich habe auch dieses Problem, die gleiche Codezeile.
C: \ Users \ Rowan \ Onedrive \ code \ react \ gradeable \ frontendnode_modules \ mongoose \ lib \ utils.js: 417
werfen err;

@ nparsons08 Ping. Können Sie uns sagen, ob es sich für Sie als Problem herausgestellt hat, Sie eine Problemumgehung gefunden haben (abgesehen von einem Downgrade auf eine frühere Mungo-Version) oder es auf andere Weise gelöst haben?

Gleiches hier und absolut keine Möglichkeit, es aufzuspüren.

Der Fehler kommt und geht.

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)

Derzeit tritt das gleiche Problem auf. Irgendeine Idee, wie man das löst.

Das Sperren, weil "Derzeit das gleiche Problem auftritt" zu vage ist, um umsetzbar zu sein. Bitte öffnen Sie eine neue Ausgabe und folgen Sie der Ausgabevorlage.

Leute, ich denke, ich habe die Ursache gefunden - anscheinend hängt es mit Mongodb 3.6 zusammen (ich habe kürzlich ein Upgrade von 3.2 auf 3.6 durchgeführt und Mungo wurde auch auf 5.x aktualisiert) ...

Da ich meine App nicht mehr ausführen konnte, wurden diese zyklischen Abhängigkeitsfehler angezeigt. Die einzige Problemumgehung bestand darin, autoIndex: false zu mongoose.connect hinzuzufügen - aber das tat ich Daher wurden meine Indizes auch nach der Verwendung von ensureIndex() später in der Anwendung nicht mehr erstellt - dies würde schließlich zu denselben zyklischen Abhängigkeitsfehlern führen.

Kurz gesagt, ich habe es geschafft, das Problem zu beheben, indem ich alle INDEX-Attribute aus meinen Modellen entfernt und sie anschließend wie folgt an das Modell angehängt habe:

Vor

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

nach

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

UND, was noch wichtiger ist, Entfernen des Attributs INDEX aus zusammengesetzten Indizes, dh:

Vor

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

nach

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

hoffe das hilft anderen
Prost

Dieses Problem tritt speziell beim Versuch auf, einen Index für ein Array hinzuzufügen:

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

Das einfache Hinzufügen dieser Requisite / dieses Index zu meinem Schema verursacht dieses Problem

hey @AndrewBarba .. versuchen Sie, den Index wie erwähnt nicht auf dem Feld, sondern im Schema hinzuzufügen, und

@gustvao Ich habe das tatsächlich zuerst versucht, kein Glück :(

@ AndrewBarba Ich hatte das gleiche Problem. Mit MongoClient musste ich verwenden:

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

Hoffe das hilft.

Passiert mir beim Versuch, einen Textindex hinzuzufügen:

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

Das Erstellen eines Textindex für mein Feld führt zu diesem Fehler. 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

Knoten - 9.11.1
Mungo - 5.1.1 (wie bei 5.0.8)
MongoDB - 3.6.2

Es könnte erwähnenswert sein, dass ich die mongodb+srv:// uri-Struktur mit einigen Optionen verwendet habe:

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

Nachdem ich die Uri-Optionen entfernt hatte, verschwand das Problem ohne weitere Codeänderungen:

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

Kann bestätigen - das Entfernen von retryWrites hat das Problem behoben, selbst mit dem "alten" URI mongodb:// .

Hi @ vkarpov15 ,

Welche Auswirkungen hat das Entfernen von retryWrites für Atlas? Ist dies etwas, was Mungo intern tut?

Ich öffne diese Ausgabe über retryWrites
https://github.com/Automattic/mongoose/issues/6469 (dann geschlossen .. dachte, es wurde gelöst)

Grüße,
Tarek

Hallo
Ich erhalte diesen Fehler auch nach der Aktualisierung auf die neueste Mungo-Version. Ich erstelle keinen Index in einem meiner Schemas. Jetzt ist meine Anwendung so groß, dass ich nicht herausfinden kann, welcher Code dieses Problem verursacht. Auf Mungo ^ 4.13.1 funktioniert einwandfrei.
/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/lib/utils.js:429
werfen err;
^

Fehler: Zyklische Abhängigkeit erkannt
at serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:331:34)
at serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:724:17)
at serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at BSON.serialize (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/bson.js:63:28)
at Query.toBin (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/connection/commands.js:144:25)
at serializeCommands (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:1053:43)
at Pool.write (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:1269:3)
at executeWrite (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:80:10)
at WireProtocol.insert (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:91:3)
[nodemon] App abgestürzt - Warten auf Dateiänderungen vor dem Start ...

Untersucht und prüft, ob das Einschalten von retryWrites diesen Absturz verursacht.

Ich kann bestätigen, dass das Entfernen von &retryWrites=true aus dem Verbindungs-URI den Fehler behebt

Bestätigt! Das Entfernen von &retryWrites=true behebt den Fehler vollständig

Funktioniert mit Atlas: MongoDB-Cluster ohne ?retryWrites=true

Das folgende Skript funktioniert sowohl lokal als auch gegen Atlas. Bitte ändern Sie das folgende Skript, um dieses Problem zu reproduzieren:

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

Bitte ändern Sie das folgende Skript, um dieses Problem zu reproduzieren:

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

const {Schema} = Mungo;

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

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

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

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

Mit diesem Code von @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());
}

Ich habe den folgenden Fehler erhalten: Error: cyclic dependency detected

Die einzige Möglichkeit, die retryWrites beizubehalten, ist die Verwendung der Funktion createIndexes von der Mongodb-API:

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

Wir entfernen also unique , index aus Mongoose-Modelldefinitionen und erstellen alle Indizes mit createIndexes (https://docs.mongodb.com/manual/reference/command/createIndexes/).

Ich bin auch auf dieses Problem gestoßen, als ich von Mongoose 4.11.7 auf 5.1.4 aktualisiert habe. Ich habe versucht, ?retryWrites=true aus meiner Verbindungs-URI zu entfernen, kein Glück. Schließlich stellte ich fest, dass ich index:true für eine benutzerdefinierte _id -Eigenschaft wie diese verwendete:

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

Das Entfernen von index:true das Problem für mich behoben. Es wurde auch dieses Problem gefunden, in dem die Lösung erwähnt wird: https://github.com/Automattic/mongoose/issues/2303. Nur das Posten, falls jemand anderes auf dasselbe Problem stößt.

Für mich ist dieses Problem aufgetreten, als ich retryWrites=true in meiner Verbindungszeichenfolge und Schema.index({ someKey: 1 }) in meinem Modell hatte.

In der Mongo-Shell ergab die Ausführung von db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } ) { "featureCompatibilityVersion" : { "version" : "3.6" } } .

Dann stufte ich die featureCompatibilityVersion auf 3.4 von mongodb herab, indem ich db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } ) in der Mongo-Shell ausführte, und führte meine Anwendung erneut mit retryWrites=true und Schema.index({ someKey: 1 }) as aus oben erwähnt.

Nachdem ich sichergestellt hatte, dass der Index erfolgreich erstellt wurde, habe ich die featureCompatibilityVersion durch Ausführen von db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } ) auf 3.6 von mongodb aktualisiert und dann meine Anwendung erneut ausgeführt. Der zyklische Abhängigkeitsfehler wurde nicht mehr angezeigt.

Fand das Problem. Es hat nichts mit Atlas oder retryWrites oder featureCompatibilityVersion zu tun. Es hat alles damit zu tun, einen Index für _id zu erstellen. Minimales Repro-Skript:

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

Öffnet dafür eine PR im Mongodb-Treiber

nice @ vkarpov15

@ vkarpov15 💪

Ich habe meine behoben, indem ich den Querryring retryWrites aus der Verbindungszeichenfolge entfernt habe.

Vor
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

nach
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

hoffe das hilft.

Versuchen Sie, alle Indizes zu entfernen, die Sie für _id @otisidev haben . Wenn Sie also etwas wie new Schema({ _id: {type: String, index: true} }) oder schema.index({ _id: 1 }) , entfernen Sie das bitte.

@ vkarpov15 Ich denke, hier kann es zwei Probleme geben. Ich habe nirgendwo in meinem Projekt Indizes für _id und habe diesen Fehler immer noch gesehen, bis ich ?retryWrites aus dem URI entfernt habe. Ich werde ein Projekt machen, das das zeigt. Unabhängig davon scheint dies wirklich ein Problem mit dem Mongodb-Fahrer und nicht mit Mongoose zu sein

@ vkarpov15 Hier ist ein Skript, das dieses Problem ohne Index für _id :

Mungo: v5.1.5
Knoten: 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()

Festlegen eines Indexfelds auf:

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

Löst dieses Problem auch immer aus

Ja, dies scheint ein legitimes Problem zu sein - ich habe meine Codebasis nach schlechten Indizes durchsucht und es scheint immer noch wieder aufzutreten. Herabgestuft auf 5.1.0 und es scheint gut zu funktionieren.

Links zu https://github.com/Automattic/mongoose/issues/6469 - ein paar weitere Repro-Schritte.

Ich habe den Fehler gesehen.

_email_ : {
Typ: String,
erforderlich: wahr,
_ einzigartig: wahr _
},
....... .......

credentialSchema.index ({

Ich musste Unique aus der Modelldefinition entfernen.

@ AndrewBarba danke für den Repro, ich habe ein anderes Problem wie Node-Mongodb-Native # 1740 gefunden, siehe https://github.com/mongodb/node-mongodb-native/pull/1758 . Dieser Fix wird in Mungo enden, sobald eine neue Version des Mongodb-Treibers veröffentlicht wird.

Ich habe das gleiche Problem bei der Verwendung von Atlas festgestellt, aber lokal war alles in Ordnung. Eine schnelle Lösung, wie jemand vorgeschlagen hat, ist das Entfernen des Parameters ?retryWrites=true , und jetzt ist alles in Ordnung.

Sollte in 5.1.8 behoben werden

Ich habe ein Problem mit MongoDB Atlas und GridStore. Der Schreibvorgang funktionierte erst, als ich "retryWrites = true" entfernte.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen