sql >> データベース >  >> NoSQL >> MongoDB

MongoDBで別の日付範囲と重複するすべての日付範囲を見つけるにはどうすればよいですか?

    日付範囲が重複しているドキュメントを検索しようとしていると思います。つまり、startのドキュメント またはend 日付は指定された日付範囲の間にあります。

    少しの一致とロジックでこれを確実に達成できます。

    コレクションに2つのドキュメントがあるとしましょう

    { 
        "_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. MongoDBの上にマルチバージョン同時実行制御(MVCC)を実装することは可能ですか?

    2. MongoDBでの遅いクエリの分析

    3. CPUが100%のときにRedisのパフォーマンスを向上させる方法は?シャーディング?最速の.Netクライアント?

    4. UTCタイムスタンプを他のゾーンタイムスタンプに変換します