2015-06-23 20 views
10

Ho una query in cui ho bisogno di ottenere eventi che sono un giorno prima o dopo da una data specifica. Devo aggiungere o sottrarre un giorno a quella variabile ISODate. Ecco la mia domanda:Aggiunta/sottrazione di giorni a ISODate in MongoDB Shell

db.event.find().forEach(function (x) { 

    print("x : " + x.EventID + ", " + x.ISODate); 
    db.events.find({ 
    "$or" : [{ 
     "StartDate" : { "$gte" : x.ISODate } // Here i need to subtract one day 
     }, { 
      "EndDate": { "$lt" : x.ISODate} // Here i need to add one day 
      }] 
}).forEach(function(otherDay) { 
     print("x.EventID : " + x.EventID + ", other.Date : " + otherDay.StartDate + " - " + otherDay.EndDate); 
     }); 

}); 

Come posso aggiungere o sottrarre giorni a una variabile ISODate nella shell mongodb?

+0

Aiutami a capire la tua domanda qui: si desidera cercare gli eventi che hanno un 'StartDate' maggiore o uguale ad una data particolare, dire' isodate ("2015-06- 21T23: 59: 59.999Z ")' O un 'EndDate' inferiore a' ISODate ("2015-06-21T00: 00: 00.000Z") '? – chridam

+0

Desidero ricevere eventi compresi tra data di inizio e data di fine. Immagino che fosse sbagliato nella domanda e ho modificato. Voglio sottrarre da startdate e aggiungere a enddate. – cuneytyvz

risposta

13

Questo è stato risposto sul Query to get last X minutes data with Mongodb

query = { 
    timestamp: { // 18 minutes ago (from now) 
     $gt: new Date(ISODate().getTime() - 1000 * 60 * 18) 
    } 
} 

E nel tuo caso, per un numero di giorni:

"StartDate" : { "$gte" : new Date(ISODate().getTime() - 1000 * 3600 * 24 * 3) } 

o

"StartDate" : { "$gte" : new Date(ISODate().getTime() - 1000 * 86400 * 3) } 

(qui la è il numero di giorni)

6

Non è una risposta esatta ma correlata.

Avevo bisogno di incrementare un campo data per tutti gli elementi nella collezione mongodb. Usa meno se devi sottrarre.

La query di seguito aggiungerà 1 giorno-myDateField in myCollection.

db.myCollection.find().snapshot().forEach(
    function (elem) { 
     db.myCollection.update(
      { 
       _id: elem._id 
      }, 
      { 
       $set: { 
        myDateField: new Date(elem.myDateField.getTime() + 1*24*60*60000) 
       } 
      } 
     ); 
    } 
); 

1 day = 1*24*60*60000 = 1 x 24 hours x 60 minutes x 60 seconds x 1000 milliseconds