تشغيل أحدث إصدار من 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)
ما هي المشكلة الأصلية هنا؟
حاول تضمين الحقل الذي يحتاج إلى التحديث بدلاً من الكائن بأكمله.
لدي هذه المشكلة أيضًا ، نفس سطر التعليمات البرمجية.
C: \ Users \ Rowan \ Onedrive \ code \ رد فعل \ gradeable \ frontendnode_modules \ mongoose \ lib \ utils.js: 417
رمي يخطئ
@ nparsons08 بينغ. هل يمكنك إخبارنا بما إذا كانت مشكلة من جانبك ، أم أنك وجدت حلاً بديلاً (إلى جانب الرجوع إلى إصدار قديم من النمس) ، أم أنك قمت بحلها بطريقة أخرى؟
نفس الشيء هنا ولا توجد طريقة على الإطلاق لتعقب.
الخطأ يأتي ويذهب.
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 :
بعد
mongodb: // sa :
أتمنى أن يساعدك هذا.
حاول إزالة أي فهارس لديك على _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".
التعليق الأكثر فائدة
يمكن التأكيد - إزالة
retryWrites
جعلت المشكلة تختفي ، حتى معmongodb://
URI "القديم".