سؤال

لدي بعض مستندات MongoDB مع هذا المخطط:

Id: {type: "id", key: true, computed: true, nullable: false},
Name: {type: "string", nullable: false, maxLength: 50}

ويتم عرض هذه المستندات على أنها OData بواسطة تطبيق ويب صغير (أنا أستخدم Express وJayData وMongoose).وهذه بعض تلك الوثائق:

{ "_id" : ObjectId("5343fd656b9c5c084b8f2a70"), "Name" : "Service74"},
{ "_id" : ObjectId("5343fd656b9c5c084b8f2a6f"), "Name" : "Service73"},
{ "_id" : ObjectId("5343fd656b9c5c084b8f2a6e"), "Name" : "Service72"},
...

إذا قمت بكتابة هذا العنوان http://localhost:8080/marketplace/Services('5343fd656b9c5c084b8f2a70') التي تتوافق مع الخدمة74 أحصل على هذه النتيجة:

...
<d:Id>NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw</d:Id>
<d:Name>Service74</d:Name>
...

بالطبع إذا استخدمت المعرف المحدد في النتيجة أحصل على نفس الصفحة.

تحدث المشكلة عندما أحاول استخدام وظيفة النمس findById:

app.post("/addCompare/:id", function(req, res) {
    console.log(req.params.id);
    Services.findById(req.params.id, function(err, service) {
        if(!err) {console.log(service);}
        else {console.log(err);}
    });
    res.send(200);
});

لقد فهمت هذا NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw ثم هذا الخطأ:

{ message: 'Cast to ObjectId failed for value "NTM0M2ZkNjU2YjljNWMwODRiOGYyYTU5" at path "_id"',
  name: 'CastError',
  type: 'ObjectId',
  value: 'NTM0M2ZkNjU2YjljNWMwODRiOGYyYTU5',
  path: '_id' }

أين أخطئ؟أخبرني إذا فاتني بعض المعلومات الأخرى ...

شكرًا.

ملاحظة:لقد وجدت مشكلة مماثلة هنا النمس:فشل الإرسال إلى ObjectId, ، ولكن إذا قمت بتغيير تعريف النموذج لـ Mongoose (الذي لا أعلن فيه المعرف فعليًا) من خلال تضمين هذا التعريف:

var serviceSchema = mongoose.Schema({
    _id: String,
    ...

لا شيء يتغير...

هل كانت مفيدة؟

المحلول

ال 5343fd656b9c5c084b8f2a70 هو المعرف الداخلي للكيان المستخدم على جانب الخادم.هذه القيمة مشفرة بـ base64 عبر OData، ولهذا السبب تتلقى NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw في حقل معرف.يمكن استرداد الكيان بسهولة عن طريق المعرف عن طريق الاتصال atob(req.params.id) على الهوية المستلمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top