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

MorphiaMongoDBはnullおよび存在しないフィールドをチェックします

    ドキュメントから 、MorphiaはNull / Empty値(デフォルト)を保存しないため、クエリ

    query.and(
        query.criteria("createdDate").exists(),
        query.criteria("createdDate").notEqual(null)
    );
    

    nullでクエリを実行できないように見えるため、機能しませんが、特定の値をクエリすることはできます。

    ただし、クエリできるのは特定の値のみであるため、createdDateを更新できる回避策を考案できます。 モデルで使用されることのない日付値を持つフィールド。たとえば、Dateオブジェクトを0で初期化すると、エポックの先頭である1970年1月1日00:00:00UTCに設定されます。取得する時間は、ローカライズされた時間オフセットです。更新にmongoシェルの一致する要素の変更のみが含まれている場合は十分であるため、次のようになります。

    db.users.update(
        {"createdDate": null }, 
        { "$set": {"createdDate": new Date(0)} }
    )
    

    その後、 FluentInterface を使用できます。 その特定の値を照会するには:

    Query<User> query = mongoDataStore
        .find(User.class)    
        .field("createdDate").exists()
        .field("createdDate").hasThisOne(new Date(0));
    

    createDateフィールドを更新するprePersistメソッドを含めるようにモデルを定義する場合は、はるかに簡単です。メソッドは@PrePersistでタグ付けされています 保存される前に注文に日付が設定されるように注釈を付けます。 @PostPersistに相当するアノテーションが存在します 、@PreLoad および@PostLoad

    @Entity(value="users", noClassNameStored = true)
    public class User {
    
        // Properties
        private Date createdDate;
    
        ...
        // Getters and setters
        ..
    
        @PrePersist
        public void prePersist() {
            this.createdDate = (createdDate == null) ? new Date() : createdDate;
        }
    }
    


    1. ImportError:redisという名前のモジュールがありません

    2. mongodbと最大接続

    3. ElastiCache統合の開始

    4. Express.js-URLでmongodbidをフィルタリングします