MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да намерите всички периоди от време, припокриващи се с друг период от време в MongoDB?

Вярвам, че се опитвате да намерите документи с припокриващи се периоди от време. С други думи всеки документ, чието start или end дати попадат между даден период от време.

Определено можете да постигнете това с малко съвпадение и логика.

Да приемем, че имам два документа в моята колекция

{ 
    "_id" : ObjectId("56f692730c96eddb0a2c287e"), 
    "start" : "2015-03-27T15:00:00.000Z", 
    "end" : "2015-03-27T17:00:00.000Z"
}
{ 
    "_id" : ObjectId("56f6928c0c96eddb0a2c287f"), 
    "start" : "2015-03-27T16:00:00.000Z", 
    "end" : "2015-03-27T27:00:00.000Z"
}

Когато изпълня следната част от код

var startDate = "2015-03-27T20:00:00.000Z";
var endDate = "2015-03-27T21:00:00.000Z";

var findOverlapingDates = function(startDate, endDate){
  return db.collection.find({
     $or: [
        {$and: [
          {start:{$gte: startDate}}, {start:{$lte: endDate}}
        ]},
        {start:{$lte: startDate}, end:{$gte: startDate}}
     ]
  });
};

printjson(findOverlapingDates(startDate, endDate).toArray());

разбирам

[
    {
        "_id" : ObjectId("56f6928c0c96eddb0a2c287f"), 
        "start" : "2015-03-27T16:00:00.000Z", 
        "end" : "2015-03-27T27:00:00.000Z"
    }
]

Което е припокриващ се документ за даден период от време. Дано всичко има смисъл. За най-добро представяне ще препоръчам да имате индекс и в двата start и end полета.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Сумира всички стойности на едноименни полета на документи в колекция

  2. MongoDB Заменете конкретни стойности на масива

  3. Mongoose:задайте поле от тип „масив от низове“

  4. Размер на документа за масив на MongoDB с условие

  5. Възможно ли е $project на mongodb да върне масив?