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

السؤال

نشر

عادةً عندما أرغب بالاطلاع على بنية مستند ما أقوم بإجراء استعلام عشوائي لإظهار الحقول الموجودة وأنواع البيانات. ولكن أرغب الآن بالحصول على اسماء جميع الحقول الموجود في مستند ما، فرضاً أن لدي الحقول التالية ضمن المستندات:

{ gen : ['comedy', 'action'] },
{ year : 2006 },
{ type : 'New' },
{ tags : ['AC','BB','COM']  }

هل يوجد طريقة استطيع من خلالها طباعة فقط اسماء هذه الحقول أي (gen, year, type, tags)؟ لأنني لا أريد الحصول على القيم بداخلها فقط اسماء الحقول.

Recommended Posts

  • 0
نشر

يمكنك إستخدام الإستعلام الآتي

mr = db.runCommand({
    "mapreduce": "my_collection",
    "map": function() {
        for (var key in this) {
            emit(key, null);
        }
    },
    "reduce": function(key, stuff) {
        return null;
    },
         "out": "my_collection" + "_keys"
})
 
db[mr.result].distinct("_id")

بحيث ستحصل على أسماء الحقول فقط

  • 1
نشر

يمكنك من خلال mongodb نفسها دون الحاجة لاستخدام لغات البرمجة من إجراء تجميع للقيم aggregation وإظهار اسماء الحقول لمستند واحد ضمن مصفوفة بتنفيذ الاستعلام التالي:

aggregate([
  {"$match":{_id: "نضع هنا رقم أي مستند"}},
  {"$project":{"fieldNames":{"$objectToArray":"$$ROOT"}}},
  {"$project":{"keys":"$fieldNames.k"}}
])

أما في حال أردت استعادة جميع اسماء الحقول لكافة المستندات دون تكرارها، يمكنك تنفيذ التالي:

aggregate([
  {"$project":{"fieldNames":{"$objectToArray":"$$ROOT"}}},
  {"$unwind":"$fieldNames"},
  {"$group":{"_id":null,"allkeys":{"$addToSet":"$fieldNames.k"}}}
])

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...