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

スプリングデータを使用してnot演算子を組み合わせる方法Criteriabuilder

    mongoを試してみました シェルとMongoDBSpringJavaコード。シェルコードは正常に機能しますが、not()を使用する対応するJavaコード 動作しません(理由はわかりません)。

    探しているのと同じ機能を使用する別の方法は次のとおりです。

    次の入力ドキュメントを使用しています:

    { _id: 1, createdOn: ISODate("2020-03-21T12:05:00") },
    { _id: 2, createdOn: ISODate("2020-03-28T18:33:00") },
    { _id: 3, createdOn: ISODate("2020-03-24T01:56:00") }
    

    そして、今日の日付を想定します :ISODate("2020-03-24T02:50:04.992Z") 、結果は_id: 3のドキュメントを除外する必要があります 、ここでcreatedOn 今日以内です 。

    mongo シェルクエリ:

    db.collection.find( {
      $or: [
        { createdOn: { $gt: ISODate("2020-03-24T23:59:59.99") } },
        { createdOn: { $lt: ISODate("2020-03-24T00:00:00") } }
      ]
    } )
    

    これにより、_idのドキュメントが返されます の1 および2 (これらは今日の日付を除外します。)

    対応するJavaコード:

    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd H:m:s");
    Date fromDate = dateFormat.parse("2020-03-24 00:00:00");
    Date toDate = dateFormat.parse("2020-03-24 23:59:59");
    
    Criteria c = new Criteria().orOperator(
                               Criteria.where("createdOn").lt(fromDate),
                               Criteria.where("createdOn").gt(toDate) );        
    Query q = Query.query(c);
    
    MongoOperations mongoOps = new MongoTemplate(MongoClients.create(), "testDB");
    List<Document> result = mongoOps.find(q, Document.class, "collection");
    result.forEach(doc -> System.out.println(doc.toJson()));
    



    1. MongoDBシャードコレクションはリバランスされていません

    2. Laravel-ジョブを順番に実行する

    3. MongoDB-すべてのアイテムをループせずにJavaでコレクションをコピーします

    4. MongoDBAggregateを使用して2つのアレイ間の内積を計算します