2013-08-20 4 views
5

से शून्य शून्य या उससे कम है, मेरे पास मोंगो डीबी में दो तिथियों के साथ एक संग्रह है जो परिभाषित करता है कि कुछ चालू है या नहीं। तो मेरे पास एक "end_date" है जो शून्य हो सकता है, या एक समय मूल्य हो सकता है। एक आइटम जो वर्तमान में एक शून्य end_date या भविष्य में एक समय है। मेरी क्वेरी इस तरह दिखती है:MongoDB - परिणाम प्राप्त करें जहां एक्स

program_enrollments.find({"start_date":{"$lte":1376982000},"end_date":[null,{"$gte ":1376982000}],"client":"52002d02cc94a31a0f000000"}, []) 

यह मेरे लिए उचित लग रहा है, लेकिन क्या मुझे एक अलग दृष्टिकोण की आवश्यकता है? मैं एक बुलियन ध्वज नहीं चाहता हूं जो कहता है कि तारीखें चालू हैं या नहीं, अगर मैं इससे बच सकता हूं।

उत्तर

9

आप $or ऑपरेशन की तलाश में हैं, जो संचालन की एक श्रृंखला स्वीकार करता है। यह बहुत तरह होगा:

$or: [{end_date: null}, {end_date: {$gte: 1376982000}}] 

आपका संपूर्ण क्वेरी दिखाई देगा:

program_enrollments.find({ 
    start_date: {$lte: 1376982000}, 
    $or: [ 
    {end_date: null}, 
    {end_date: {$gte: 1376982000}} 
    ], 
    client:"52002d02cc94a31a0f000000" 
}) 

पैमाने पर करने के लिए, आप या तो $gte और $lte ऑपरेटरों को दूर करने के लिए एक रास्ता खोजने के लिए चाहते हैं। MongoDB क्वेरी में विभिन्न विशेषताओं पर $lte और $gte के संयोजन का उपयोग नहीं कर सकता है।

0

{end_date: null} के बजाय आप पूछ सकते हैं कि चर {end_data: {$exists: false}} का उपयोग कर मौजूद है या नहीं। ध्यान दें कि end_datenull मान वाले दस्तावेज़ में है, तो पहला काम करेगा और दूसरा नहीं होगा।

+1

'{end_date: null} 'ने कोने-केस को भी कवर किया जहां क्षेत्र केवल चूक के कारण मौजूद नहीं था,' {end_data: {$ मौजूद: false}} 'नहीं ... कम से कम नहीं जब मैं v3.0 के साथ परीक्षण किया – pulkitsinghal

संबंधित मुद्दे