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

日付フィールドの時刻に基づいてMongoDBコレクションからドキュメントを削除します

    正規表現は、文字列以外のものでは機能しません。実際には、 BSON Dateを選択する簡単な方法はありません。 純粋に、通常のクエリ式の時間値です。

    これを行うには、 $where 時間だけに一致する追加のロジックを使用した条件 日付値の一部。

    質問で実際に提供されたデータに基づく:

    db.getCollection('collection').remove({
      "Id": "1585534",
      "Type": NumberInt(42),
      "$where": function() {
        return this.InDate.getUTCHours() === 18
          && this.InDate.getUTCMinutes() === 30
      }
    })
    

    これはもちろん、実際には "Id" で識別されているだけですが、提供されたデータの最初のドキュメントにすぎません。 とにかく、その値は2つの間で一意であるためです。

    .getUTCHours() および .getUTCMinutes() JavaScript 日付です。 オブジェクトメソッド。これは、 BSON Date $ where内で使用すると表現されます 式。

    自明なことに、MongoDB 3.6(執筆時点で近日公開)では、よりも効率的なフォームが可能です。 $ where 集計式の場合:

    db.getCollection('collection').aggregate([
      { "$match": {
        "Id": "1585534",
        "Type": NumberInt(42),
        "$expr": {
          "$and": [
            { "$eq": [{ "$hour": "$InDate" }, 18 ] },
            { "$eq": [{ "$minute": "$InDate" }, 30] } 
          ] 
        }   
      }}
    ])
    

    ただし、このような式は、などのメソッドで直接使用することはできません。 .remove() または .deleteMany() 、ただし $ where 式はできます。



    1. MongoDB _id(ObjectId)は昇順で生成されますか?

    2. タイプ情報をMongoDBに渡して、インターフェイスタイプを適切に逆シリアル化できるようにしますか?

    3. MongoRepository動的クエリ

    4. 初心者向けのMongoDBチュートリアル(完全ガイド)–15分でMongoDBを学ぶ