استعلام MongoDB: الحقل إما غير موجود أو له قيمة محددة
سؤال
أرغب في الاستعلام عن مجموعة Mongo للسجلات التي لا تملك قيمة لحقل يسمى "مخطط" ، أو لديك بشكل صريح قيمة "HTTP" لـ "المخطط". تبدو سهلة للغاية ، لكن هذه المشكلة أثبتت أنها أكثر تعقيدًا مما تظهر لأول مرة.
حيث db.collection.find({'scheme': None})
إرجاع جميع السجلات التي يكون فيها "المخطط" غير محدد (لا يوجد حقل فهرس) ، افترضت في البداية أن ما يلي سيعمل:
db.collection.find({'scheme': {'$in': ['http', None]}})
ومع ذلك ، يبدو أن هذا يستبعد القيم التي يكون فيها "المخطط" غير محدد ، لذلك لا يمكنني إلا أن أفترض أنه يبحث عن السجلات التي يكون فيها المخطط إما "http" None
. يبدو أن هذا غير بديهي بعض الشيء ، ولكن هناك. كانت محاولتي الثانية ما يلي:
db.collection.find( {'$or': [{'scheme': {'$exists': False}}, {'scheme': 'http'}]})
هذا يستبعد أيضًا النتيجة حيث يكون المخطط غير محدد. هذه المرة ، لا يمكنني حتى التفكير في سبب منطقي يجعل هذا الفشل.
أي أفكار لماذا هذا فشل ، وكيف يمكنني الحصول عليها للعمل كما هو مطلوب؟
شكرًا
تحرير: فقط اعتقدت أنني لاحظت أنني أقوم بهذا الاستعلام من خلال بيثون (Pymongo) ، وهو ما يفسر None
(فوق جافا سكريبت null
)
المحلول
تم حلها: يبدو أن هذه مسألة من إصدار MongoDB (1.4.4) ، يتم حل المشكلة في 1.6.5.