sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB finder datointerval, hvis det overlapper med andre datoer

Tidsoverlapningen kan illustreres med disse 4 tilfælde i figuren nedenfor, hvor S/E er startdato/slutdato for det nye dokument og S'/E' er startdato/slutdato for ethvert eksisterende dokument:

S' E' |-------------------| S E |****************| S' E' |-----------| S' E' |-----------| S' E' |-----------|

I 4 tilfælde har vi S'<E og E'>S . Forespørgslen for at finde alle dokumenter med overlappende tid kan være:

db.collection.find({"startdate": {"$lt": E}, "enddate": {"$gt": S}})
 

EDIT:

Din startdato og slutdato er i strengformat og ikke leksikalsk ordnet, og kan derfor ikke bruge "$gt" og "$lt" til sammenligning. Du bør konvertere dem til datotype:

db.collection.find().forEach(
  function (e) {
    // convert date if it is a string
    if (typeof e.startdate === 'string') {
       e.startdate = new Date(e.startdate);
    }
    if (typeof e.enddate === 'string') {
       e.enddate = new Date(e.enddate);
    } 
    // save the updated document
    db.collection.save(e);
  }
)
 

Den endelige forespørgsel vil være:

db.collection.find({"startdate": {"$lt": new Date("E")}, "enddate": {"$gt": new Date("S")}})
 



  1. Sammenlign to datofelter i MongoDB

  2. Opret d3.js graf fra data på mongodb server

  3. Hvordan indstilles standard dbpath for mongoDB i Windows 7?

  4. Hvordan får man junit-testene til at bruge den indlejrede mongoDB i en springboot-applikation?