سؤال

أحصل على نتيجة (الكائن) من استعلام النمس وأريد استبدال/إزالة بعض المفاتيح، قبل أن أقوم بتقييد الكائن وإرساله إلى العميل.

عندما أقوم بتسجيل الكائن، يكون كل شيء جميلًا (يتم سرد جميع المفاتيح، لا أكثر).عندما أقوم بإجراء for..in على الكائن، تظهر الحقول المخفية من العدم (ولا تظهر مفاتيح الاهتمام).إنهم منطقيون - إنهم ينتمون إلى النمس - لكنني لا أريدهم.يحدث نفس الشيء، عند استخدام Object.keys أو Object.getOwnPropertyNames على الكائن - الحقول المخفية المنبثقة، لا شيء مفيد.

لذلك أردت فحص العنصر باستخدام util.inspect(obj,true,null,true) وتسجيل النتيجة إلى وحدة التحكم.النتيجة على وحدة التحكم هي نفسها، كما لو كنت قد قمت بتسجيل الكائن مباشرةً دون إجراء فحص.

والآن سؤالان؛

  1. كيف يمكنني فحص كائن بشكل صحيح، حتى أحصل فعليًا على معلومات داخلية/مخفية حول الكائن؟
  2. كيف يمكنني التكرار على الكائن والحصول على الحقول فقط؟(نعم، أنا أقوم بالتحقق من hasOwnProperty داخل حلقة for..in)

//يحرر

حسنا فهمت.بعد إجراء بعض التحقيقات، أدركت أن كائن النمس يمثل خصائصه ولديه وظيفة toJSON، وهو ما يفسر سبب وجود console.logs في بنية الإخراج المتوقعة.الحل هو استخدام طريقة toObject الخاصة بـ Mongoose؛

mongooseObj.toObject({ getters: true, virtuals: false })

بهذه الطريقة، يمكنني التكرار على Object.getOwnPropertyNames واستبدال/إزالة المفاتيح التي لا أريد أن يعرف عنها العميل!

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

المحلول

سأخمن أنك تبحث في المستند يعد كائن بواسطة استعلام mongoose عندما تريد حقاانظر البيانات.إذا كان تخميني صحيحا، فربما تريد شيئا مثل هذا: giveacodicetagpre.

نصائح أخرى

أيضًا إذا كنت تريد الوصول إلى حقل معين من ملف وثيقة يمكنك إلقاء نظرة على:

المستند#الحصول على

// path
doc.get('age') // 47

// dynamic casting to a string
doc.get('age', String) // "47"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top