मेरे पास एक कोड क्वेरी $gte तारीख है, यह ठीक काम करती है।

cityCollection.aggregate([
    { 
      "$project": { 
          theater: true,
          movie: {
            $filter: {
              input: {
                $map: {
                  input: "$movie",
                  as: "movie",
                  in: {
                      cnName: "$$movie.cnName",
                      enName: "$$movie.enName",
                      releasedTime: {
                        $filter: {
                          input: "$$movie.releasedTime",
                          as: "movie",
                          cond: { $and:{
                            $gte: [ "$$movie", new Date(`${today} 20:00:00.000Z`) ]
                          }}
                        }
                      }
                  }
                }
              },
              as: "movie",
              cond: "$$movie"
            }
          }
      }
    }
])
    .then(drivers => res.send(drivers))
    .catch(next);

अब मैं दो तारीखों के बीच पूछताछ करना चाहता हूं, मैं अपने कोड के अंदर $lte जोड़ने की कोशिश करता हूं:

releasedTime: {
   $filter: {
      input: "$$movie.releasedTime",
      as: "movie",
      cond: {
        $gte: [ "$$movie", new Date(`${today} 20:00:00.000Z`) ],
        $lte: [ "$$movie", new Date(`${today} 22:00:00.000Z`) ] 
      }
   }
}

लेकिन मुझे त्रुटि मिलती है:

{
    "error": "An object representing an expression must have exactly one field: { $gte: [ \"$$movie\", new Date(1526328000000) ], $lte: [ \"$$movie\", new Date(1526335200000) ] }"
}

मैं कुछ समाधान ढूंढ रहा हूं $and, इसलिए मैं अपने कोड में $and जोड़ने का प्रयास करता हूं:

releasedTime: {
  $filter: {
    input: "$$movie.releasedTime",
    as: "movie",
    cond: { $and:{
      $gte: [ "$$movie", new Date(`${today} 20:00:00.000Z`) ],
      $lte: [ "$$movie", new Date(`${today} 22:00:00.000Z`) ] 
    }}
  }
}

यह अभी भी वही त्रुटि दिखाता है, मुझे नहीं पता कि मुझे किस कदम का प्रयास करना चाहिए।

किसी भी सहायता की सराहना की जाएगी। अग्रिम में धन्यवाद।

1
Morton 14 मई 2018, 16:14

1 उत्तर

सबसे बढ़िया उत्तर

यह कोष्ठक [] है, न कि ब्रेसिज़ {}, ज्यादातर इसलिए क्योंकि यह एकत्रीकरण उपयोग के संदर्भ में "शर्तों की सरणी" है।

releasedTime: {
  $filter: {
    input: "$$movie.releasedTime",
    as: "movie",
    cond: { $and:[
      { $gte: [ "$$movie", new Date(`${today} 20:00:00.000Z`) ] },
      { $lt: [ "$$movie", new Date(`${today} 22:00:00.000Z`) ] }
    ]}
  }
}

वास्तव में $and (एकत्रीकरण) पर उदाहरण हैं। दस्तावेज़ीकरण के भीतर। जैसे यहां

यह भी ध्यान दें कि जब आप एक विशिष्ट सीमा राशि "अधिकतम" चाहते हैं तो आपका मतलब आमतौर पर $lt से होता है। हमेशा "सबसे बड़े संभव" को शामिल करने के बजाय "अगले उच्चतम मूल्य" से कम पर जाएं।

4
Neil Lunn 14 मई 2018, 16:22