اذهب إلى المحتوى
  • 0

كيف أتحقق من نمط ObjectID في mongodb؟

Tamim Fahed

السؤال

لدي مجموعة من المستندات تحوي حقل معرّف ObjectID بنمط سلسلة نصيّة بدلاً من النمط Object ID المستخدم في mongodb.

{
	....
	newID: "f9e1fa551137c2c572808a5f"
}

هل يوجد طريقة معيّنة استطيع من خلالها أثناء عملية المقارنة التأكد من أن هذه السلسلة النصية (أي الحقل newID) هي ID صالح في mongoDB وبالتالي تحويله إلى ObjectID ؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

تستطيع إستخدام مكتبة mongoose أو mongodb نفسها للتحقق من أن المعرف id صالح.

استيراد ObjectId من حزم mongodb أو mongoose:

  • باستخدام Mongodb:
const ObjectId = require('mongodb').ObjectId;
// or
const mongodb, {ObjectId} = require('mongodb');
  • باستخدام Mongoose:
const ObjectId = require('mongoose').Types.ObjectId;

ومع ذلك ، يقوم (id)ObjectId.isValid بإرجاع true حتى بالنسبة للسلاسل غير الصالحة ذات الطول 12.

لمنع مثل هذه الحالات ، يمكن إضافة فحص آخر بعد التحقق الافتراضي الذي سيعيد صواب أو خطأ بناءً على الشرط:

(String)(new ObjectId(id)) === id

إنشاء دالة بهذا الشرط:

const mongoose = require('mongoose'),
    ObjectId = mongoose.Types.ObjectId;
  
// Validator function
function isValidId(id){
      
    if(ObjectId.isValid(id)){
        if((String)(new ObjectId(id)) === id)
            return true;        
        return false;
    }
    return false;
}

console.log(ObjectId.isValid("barbarbarbar")) // true
console.log(isValidId("barbarbarbar")) // false
console.log(isValidId("594ced02ed345b2b049222c5")) // true

أيضاً إبتداءً من Mongoose > 5.7.12 تم إضافة دالة تقوم بعمل نفس الشيء: isValidObjectId:

mongoose.isValidObjectId(string); /* true or false */
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

يمكنك ستخدام مدقق ObjectId أو  validate valid objectIds الذي يعمل على التحقق من صحة objectIds كالتالي

var ObjectId = require('mongoose').Types.ObjectId;
ObjectId.isValid(قيمة الحقل newID);

سوف يقزم بارجاء قيمة true اذا كان بالفعل ObjectId

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

يمكنك استخدام  نمط RegEx للتحقق من صحة ال id كما يلي:

if (id.match(/^[0-9a-fA-F]{24}$/)) {
       
   // ObjectID تُمثل  
} else {
    // ObjectID ليست     
}

و يمكنك استخدام هذه الدالة أيضًا و التي يمكن أن تمرر لها سلسلة نصية أو int أو objectId و ستقوم بإرجاع objectId إذا كان ال id المرر لها صالح أو null إذا لم يكن صالحًا:

var ObjectId= require('mongoose').Types.ObjectId;

function toObjectId(id) {

    var stringId = id.toString().toLowerCase();

    if (!ObjectId.isValid(stringId)) {
        return null;
    }

    var result = new ObjectId(stringId);
    if (result.toString() != stringId) {
        return null;
    }

    return result;
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...