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

MongoDBは、他の日付と重複する場合に日付範囲を検索します

    時間の重複は、次の図の4つのケースで説明できます。ここで、S / Eは新しいドキュメントの開始日/終了日であり、S'/E'は既存のドキュメントの開始日/終了日です。

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

    4つのケースでは、S'<E およびE'>S 。時間の重複するすべてのドキュメントを検索するクエリは、次のようになります。

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

    編集:

    開始日と終了日は文字列形式であり、字句順に並べられていないため、比較に「$gt」と「$lt」を使用することはできません。それらを日付型に変換する必要があります:

    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);
      }
    )
    

    最終的なクエリは次のようになります:

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



    1. 値と条件でグループ化

    2. レプリカセットの設定を変更するにはどうすればよいですか?

    3. Dockerfile内のMongorestore

    4. Redisクラスターへの接続に失敗しました