Mongoose: خطأ: تم اكتشاف تبعية دورية

تم إنشاؤها على ٨ فبراير ٢٠١٨  ·  40تعليقات  ·  مصدر: Automattic/mongoose

تشغيل أحدث إصدار من Node.js على macOS. يعمل أيضًا على تشغيل أحدث إصدار من Mongoose.

رؤية 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 \ رد فعل \ gradeable \ 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: false إلى mongoose.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
}
...

ببساطة إضافة هذا الفهرس إلى مخططي يسبب هذه المشكلة

مرحبًا 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

تجدر الإشارة إلى أنني كنت أستخدم بنية uri mongodb+srv:// مع بعض الخيارات:

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

بمجرد إزالة خيارات uri ، اختفت المشكلة دون أي تغييرات أخرى في الكود:

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

يمكن التأكيد - إزالة retryWrites جعلت المشكلة تختفي ، حتى مع mongodb:// URI "القديم".

مرحبًا @ vkarpov15 ،

ما هو تأثير إزالة retryWrites لـ Atlas ، هل هذا شيء يقوم به النمس داخليًا؟

أفتح هذه المشكلة حول إعادة المحاولة للكتابة
https://github.com/Automattic/mongoose/issues/6469 (ثم ​​أغلقها .. اعتقدت أنه تم حلها)

مع تحياتي،
طارق

مرحبا
أتلقى هذا الخطأ أيضًا بعد التحديث إلى أحدث إصدار من النمس. أنا لا أقوم بإنشاء أي فهرس في أي من مخططاتي. الآن تطبيقي كبير جدًا ، ولا يمكنني معرفة الكود الذي يسبب هذه المشكلة. على النمس ^ 4.13.1 يعمل بشكل جيد.
/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/lib/utils.js:429
رمي يخطئ
^

خطأ: تم اكتشاف تبعية دورية
في serializeObject (/ المستخدمون/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 (/ المستخدمون/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 (/ المستخدمون/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 (/ المستخدمون/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 (/ المستخدمون/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 (/ المستخدمون/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 (/ المستخدمون/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 (/ المستخدمون/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 (/ المستخدمين/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 (/ المستخدمون/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 (/ المستخدمون/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 (/ المستخدمون/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 يسبب هذا التعطل.

أستطيع أن أؤكد أن إزالة &retryWrites=true من عنوان URI للاتصال يصلح الخطأ

تم تأكيد! إزالة &retryWrites=true يصلح الخطأ حقًا

يعمل على مجموعة أطلس: MongoDB بدون ?retryWrites=true

يعمل البرنامج النصي أدناه بشكل جيد بالنسبة لي محليًا وضد أطلس. الرجاء تعديل البرنامج النصي أدناه لإعادة إظهار هذه المشكلة:

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

ههههههههههه

الرجاء تعديل البرنامج النصي أدناه لإعادة إظهار هذه المشكلة:

"تأكيد const = تتطلب ('تأكيد') ؛
const mongoose = تتطلب ('mongoose') ؛
mongoose.set ("تصحيح" ، صحيح) ؛

const {مخطط} = نمس؛

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

تشغيل دالة غير متزامنة () {
await mongoose.connect ('mongodb + srv: // user: [email protected]/test؟ retryWrites = true'، {dbName: 'db-name'}) ؛

const M = mongoose.model ('Test'، مخطط جديد ({name: {type: String، unique: true}}))؛

await M.create ({name: 'test'})؛
console.log (await 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 هي استخدام الوظيفة createIndexes من 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());
}

لذلك نقوم بإزالة unique ، index من تعريفات نموذج Mongoose وإنشاء جميع الفهارس باستخدام

واجهت هذه المشكلة بالإضافة إلى التحديث من Mongoose 4.11.7 إلى 5.1.4. حاولت إزالة ?retryWrites=true من معرف الاتصال الخاص بي ، ولم يحالفني الحظ. أخيرًا ، اكتشفت أنني كنت أستخدم index:true في خاصية _id مخصصة مثل هذا:

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

أدت إزالة index:true إصلاح المشكلة بالنسبة لي. وجدت أيضًا هذه المشكلة التي تشير إلى الحل: https://github.com/Automattic/mongoose/issues/2303. مجرد النشر في حالة تعرض شخص آخر لنفس المشكلة.

بالنسبة لي ، واجهت هذه المشكلة عند وجود retryWrites=true في سلسلة الاتصال الخاصة بي و Schema.index({ someKey: 1 }) في نموذجي.

في mongo shell ، أدى تنفيذ db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } ) إرجاع { "featureCompatibilityVersion" : { "version" : "3.6" } } .

ثم قمت بخفض مستوى featureCompatibilityVersion إلى 3.4 من mongodb من خلال تنفيذ db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } ) في mongo shell وتشغيل طلبي مرة أخرى بـ retryWrites=true و Schema.index({ someKey: 1 }) كـ المذكور أعلاه.

بعد التأكد من إنشاء الفهرس بنجاح ، قمت بترقية featureCompatibilityVersion إلى 3.6 من mongodb من خلال تنفيذ db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } ) ، ثم قمت بتشغيل تطبيقي مرة أخرى. لم يعد خطأ التبعية الدورية يظهر بعد الآن.

وجدت المشكلة. لا علاقة له بـ Atlas أو retryWrites أو featureCompatibilityVersion . كل شيء له علاقة بمحاولة إنشاء فهرس على _id . الحد الأدنى من البرنامج النصي repro:

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 السائق لهذا الغرض

جميله

@ vkarpov15

لقد أصلحت لي عن طريق إزالة سلسلة استعلام retryWrites من سلسلة الاتصال.

قبل
mongodb: // sa :@ cluster0-shard-00-00-ljpyb.mongodb. net: 27017 ، الكتلة 0-شارد-00-01-ljpyb.mongodb. صافي: 27017 ، الكتلة 0-شارد-00-02-ljpyb.mongodb. net: 27017 / test؟ ssl = true & replicaSet = Cluster0-shard-0 & authSource = admin & retryWrites = true

بعد
mongodb: // sa :@ cluster0-shard-00-00-ljpyb.mongodb. صافي: 27017 ، الكتلة 0-شارد-00-01-ljpyb.mongodb. صافي: 27017 ، الكتلة 0-شارد-00-02-ljpyb.mongodb. net: 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 في أي مكان في مشروعي وما زلت أرى هذا الخطأ حتى أزلت ?retryWrites من URI. سأقوم بمشروع يوضح ذلك. بغض النظر ، هذا يبدو حقًا وكأنه مشكلة مع برنامج mongodb وليس النمس

@ 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 ، ipAddress: 1 ، كلمة المرور: -1}) ؛

اضطررت لإزالة فريد من تعريف النموذج.

AndrewBarba شكرًا على repro ، لقد وجدت مشكلة أخرى مثل node-mongodb-native # 1740 ، راجع https://github.com/mongodb/node-mongodb-native/pull/1758 . سينتهي هذا الإصلاح في النمس بمجرد إصدار إصدار جديد من برنامج التشغيل mongodb.

واجهت نفس المشكلة عند استخدام الأطلس ، لكن كل شيء كان جيدًا محليًا. حل سريع حولها ، كما اقترح أحد الأشخاص ، هو إزالة المعلمة ?retryWrites=true ، والآن الأمور على ما يرام.

يجب أن تكون ثابتة في 5.1.8

لدي مشكلة مع MongoDB Atlas و GridStore ، لم تكن عملية الكتابة تعمل حتى قمت بإزالة "retryWrites = true".

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات