هل تريد طلب ميزة أو الإبلاغ عن خطأ ؟
الإبلاغ عن خطأ
ما هو السلوك الحالي؟
اختبار اجتياز الجهاز المحلي ولكن الفشل على خادم jenkins بنفس الإصدارات بالضبط. الاختلاف الوحيد المحلي هو أن macos و jenkins هو ubuntu بقدر ما أستطيع أن أقول.
في MacOS Sierra ، العقدة 8.4 و 7.11 و mongodb 3.4.7 و mongoose 4.11.7 ، يمر الاختبار التالي ، ولكن على خادم jenkins الخاص بنا مع نفس الإصدارات على خادم ubuntu 16.04 يفشل.
it("should successfully allow an alias that matches a service", async () => {
const aliasTag = "this is a test";
const appAlias = await AliasController.create(user, appAliasSpec);
const serviceAlias = await AliasController.create(user, serviceAliasSpec);
appAlias.aliases.push(aliasTag);
await appAlias.save(); // This is the line that fails in jenkins
serviceAlias.aliases.push(aliasTag);
await serviceAlias.save();
const confAppAlias = await AliasController.getById(appAlias._id);
const confServiceAlias = await AliasController.getById(serviceAlias._id);
expect(confAppAlias.aliases[1]).to.equal(aliasTag);
expect(confServiceAlias.aliases[1]).to.equal(aliasTag);
});
هذا هو الخطأ الدقيق الذي أحصل عليه:
{
"message": "Unknown modifier: $pushAll",
"name": "MongoError",
"stack": "MongoError: Unknown modifier: $pushAll\n at Function.MongoError.create (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/error.js:31:11)\n at toError (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/utils.js:139:22)\n at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/collection.js:1060:67\n at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/connection/pool.js:469:18\n at _combinedTickCallback (internal/process/next_tick.js:131:7)\n at process._tickCallback (internal/process/next_tick.js:180:9)",
"code": 9
}
تحرير: هنا نسخة أكثر قابلية للقراءة من تتبع المكدس
MongoError: Unknown modifier: $pushAll
at Function.MongoError.create (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/error.js:31:11)
at toError (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/utils.js:139:22)
at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/collection.js:1060:67
at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/connection/pool.js:469:18
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)
هل يمكنك عمل mongoose.set('debug', true)
ولصق ناتج المونجو؟
تحرير: إخراج أكثر وضوحا
Mongoose: aliases.update({ _id: ObjectId("599d98122b72d12e0ba858b4") }, { '$pushAll': { aliases: [ 'this is a test' ] }, '$set': { updatedAt: new Date("Wed, 23 Aug 2017 14:58:26 GMT") }, '$inc': { __v: 1 } })
{"name":"davis","hostname":"ld-ub-bm980a98v","pid":11787,"level":50,"err":{"message":"Unknown modifier: $pushAll","name":"MongoError","stack":"MongoError: Unknown modifier: $pushAll
at Function.MongoError.create (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/error.js:31:11)
at toError (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/utils.js:139:22)
at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/collection.js:1060:67
at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/connection/pool.js:469:18
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)","code":9},"msg":"An unhandled Mongo error occurred.","time":"2017-08-23T14:58:26.201Z","v":0}
لمعرفة ما يستحق ، راجعت إخراج التصحيح في بيئات التطوير والإنتاج المحلية لدينا وكلاهما يستخدم معدِّل pushAll $ بنجاح. يتم تثبيت Mongo من الحزم الرسمية في جميع الأحوال. آلات التطوير هي windows و MacOS ، وآلات الإنتاج هي amazon linux.
هل يمكنك الاتصال بمثيل jenkins mongodb الخاص بك باستخدام mongo shell والتحقق مرة أخرى من الإصدار باستخدام db.version
؟
$ mongo test
MongoDB shell version v3.4.1
connecting to: mongodb://127.0.0.1:27017/test
MongoDB server version: 3.4.1
> db.version()
3.4.1
> ^C
bye
يمكنك أيضًا طباعة إصدار الخادم باستخدام الأمر serverStatus()
باستخدام mongoose:
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test');
mongoose.connection.on('open', function() {
mongoose.connection.db.admin().serverStatus(function(error, info) {
console.log(info.version);
});
});
يرجى التحقق مرة أخرى من الإصدار الخاص بك أولاً ، تميل الحزم الرسمية إلى التقادم بسرعة كبيرة.
نعم ، لديك نفس الخطأ. حاول الانتقال من 3.2 إلى 3.5 (بدون ترحيل البيانات). لدي مجال مصفوفة
'liked': {
'item':[ {
'id': {'type': Types.ObjectId, 'ref': 'Item'},
'score': {'type': Number, 'max': 100, 'default': -1},
'comment': {'type': String, 'maxlength': 65000, 'trim': true, 'default': '', 'set': san.methods.safe}
} ]
},
أعلم أن id
ليس أفضل اسم حقل ، لكنه نجح في 3.2. في 3.5 يفشل بعد محاولة .save()
المستند بعد دفع عنصر إلى المصفوفة. أدفع العناصر عبر .push()
ثم أضع علامة على الحقل .markModified('liked.item');
. schould يكون بسيطا.
MongoDB 3.5؟
نعم
targetMinOS: Windows 7/Windows Server 2008 R2
db version v3.5.13
git version: 52bbaa007cd84631d6da811d9a05b59f2dfad4f3
OpenSSL version: OpenSSL 1.0.1u-fips 22 Sep 2016
allocator: tcmalloc
modules: none
build environment:
distmod: 2008plus-ssl
distarch: x86_64
target_arch: x86_64
حسنًا ، هذه مشكلة واحدة ، mongodb 3.5 هو إصدار مطور غير مستقر ويجب عدم استخدامه. تم إهمال $ pushAll لفترة طويلة ، لذا ربما تخلصوا منه في 3.5. mbroadst هل يمكنك التوضيح؟
أضفنا خيارًا usePushEach
للتغلب على هذا الأمر منذ فترة: https://github.com/Automattic/mongoose/issues/4455 ، يجب أن يكون هذا حلاً لهذه المشكلة:
new Schema({ arr: [String] }, { usePushEach: true });
@ vkarpov15 نعم تمت إزالته مقابل featureCompatibilityVersion=3.6
تاتش. في هذه الحالة سوف نتأكد من إخراج # 5670.
أواجه نفس المشكلة بالضبط أنا أستخدم mongodb v3.6 على ubuntu الخاص بي. إذا تمت إزالة pushAll من db ، فكيف يمكنني حفظ المثيل .. من فضلك زودني بأي بديل
rankitbishnoi يمكنك usePushEach
على كل تعريف مخطط في الخيارات.
@ vkarpov15 شكرا على المكتبة الرائعة يا سيدي.
أنا أيضًا أواجه هذه المشكلة مع Mongoose 4.13.7 و MongoDB 3.6.0.
تحديث: أدت إضافة usePushEach: true
إلى خيارات مخطط النماذج إلى حل هذا الأمر.
chaddjohnsondyladan يعمل حقا.
شكر كثيرا!
من فضلك كيف يمكنني فعل هذا؟ كيف يمكنني إضافة هذا إلى خيارات المخطط؟ اشكرك!
@ raphaelbp12 فيما يلي المستندات الخاصة باستخدام خيارات المخطط: http://mongoosejs.com/docs/guide.html
لا يؤدي تحديث المخطط إلى تغيير هذا السلوك. إنه لا يعمل مع البيانات القديمة في قاعدة البيانات بالفعل لـ 3.6.
تحرير: العودة إلى الإصدار 3.4 حل المشكلة.
كنت أواجه مشكلة مماثلة في تشغيل الكود في جهازي. أعتقد أنه بسبب Mongoose 5 و MongoDB 3.6. حاول التراجع:
npm install [email protected] --save
) ، وdb.version()
).عملت معي! :)
لا ينبغي أن تتأثر Mongoose 5 بهذه المشكلة ، فهي لا تستخدم $pushAll
أي مكان. إذا تلقيت هذا الخطأ مع mongoose 5 ، فالرجاء فتح مشكلة في نماذج التعليمات البرمجية: +1:
ملاحظة C: \ Users \ paula \ projetos \ apiNode \ src> node index.js
{MongoError: معدِّل غير معروف: pushAll $
في Function.MongoError.create (C: \ Users \ paula \ projetos \ apiNode \ node_modules \ mongodb-core \ lib \ error.js: 31: 11)
في toError (C: \ Users \ paula \ projetos \ apiNode \ node_modules \ mongodb \ lib \ utils.js: 139: 22)
في C: \ Users \ paula \ projetos \ apiNode \ node_modules \ mongodb \ lib \ collection.js: 1059: 67
في C: \ Users \ paula \ projetos \ apiNode \ node_modules \ mongodb-core \ lib \ connection \ pool.js: 469: 18
في _combinedTickCallback (داخلي / عملية / next_tick.js: 131: 7)
في process._tickCallback (داخلي / عملية / next_tick.js: 180: 9)
الاسم: "MongoError" ،
message: "معدل غير معروف: pushAll $" ،
سائق: صحيح ،
الفهرس: 0 ،
الكود: 9
مرحبًا بالجميع ، من فضلك أخبرني كيف أصلح الخطأ Unknown modifier: $ pushAll
робовал вот так не работает
const mongoose = تتطلب ('mongoose')
const Схема = mongoose.Schema
const UserSchema = مخطط جديد ({
معرف برقية: {
نوع الرقم،
مطلوب: صحيح ،
usePushEach: صحيح
} ،
أفلام: {
اكتب: [سلسلة] ،
إفتراضي: []
}
})
mongoose.model ("المستخدمون" ، UserSchema)
@ rivers-lis يجب عليك إضافة usePushEach
إلى خيارات المخطط ، وليس إلى المخطط ، مثل:
new Schema({ ... }, { usePushEach: true });
ак то вот так
const mongoose = تتطلب ('mongoose')
مخطط كونست = النمس
const UserSchema = مخطط جديد ({
معرف برقية: {
نوع الرقم،
مطلوب: صحيح
} ،
films: {
type: [String],
default: []
}
})
مخطط جديد ({}، {usePushEach: true})
mongoose.model ("المستخدمون" ، UserSchema)
new Schema({ ... }, { usePushEach: true });
هذا يحل الخطأ بالنسبة لي أيضًا في الإصدار 4.4.12 و 5.0.7
ак то вот так
const mongoose = تتطلب ('mongoose')
مخطط كونست = النمسconst UserSchema = مخطط جديد ({
معرف برقية: {
نوع الرقم،
مطلوب: صحيح
} ،films: { type: [String], default: [] }
})
مخطط جديد ({}، {usePushEach: true})
mongoose.model ("المستخدمون" ، UserSchema)
آسف لا أستطيع قراءة الروسية
DanGDroid ترجم تقريبًا "Как то вот так" -> "شيء من هذا القبيل"
التعليق الأكثر فائدة
حسنًا ، هذه مشكلة واحدة ، mongodb 3.5 هو إصدار مطور غير مستقر ويجب عدم استخدامه. تم إهمال $ pushAll لفترة طويلة ، لذا ربما تخلصوا منه في 3.5. mbroadst هل يمكنك التوضيح؟
أضفنا خيارًا
usePushEach
للتغلب على هذا الأمر منذ فترة: https://github.com/Automattic/mongoose/issues/4455 ، يجب أن يكون هذا حلاً لهذه المشكلة: