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

MongoTemplate upsert-pojo(どのユーザーが編集したか)から更新を行う簡単な方法?

    この質問に対するかなり良い解決策を見つけました

    //make a new description here
    Description d = new Description();
    d.setCode("no");
    d.setName("norwegian");
    d.setNorwegian("norwegian");
    d.setEnglish("english");
    
    //build query
    Query query = new Query(Criteria.where("code").is(description.getCode()));
    
    //build update
    DBObject dbDoc = new BasicDBObject();
    mongoTemplate.getConverter().write(d, dbDoc); //it is the one spring use for convertions.
    Update update = Update.fromDBObject(dbDoc);
    
    //run it!
    mongoTemplate.upsert(query, update, "descriptions");
    

    Plzは、Update.fromDBObjectがdbDocのすべてのフィールドを含む更新オブジェクトを返すことに注意してください。 null以外のフィールドを更新するだけの場合は、nullフィールドを除外する新しいメソッドをコーディングする必要があります。

    たとえば、フロントエンドは次のようなドキュメントを投稿します:

    //make a new description here
    Description d = new Description();
    d.setCode("no");
    d.setEnglish("norwegian");
    

    フィールド「言語」を更新するだけで済みます:

    //return Update object
    public static Update fromDBObjectExcludeNullFields(DBObject object) {
        Update update = new Update();       
        for (String key : object.keySet()) {
            Object value = object.get(key);
            if(value!=null){
                update.set(key, value);
            }
        }
        return update;
    }
    
    //build udpate
    Update update = fromDBObjectExcludeNullFields(dbDoc);
    


    1. Mongodbに100MBの大きなファイルを保存する

    2. スキーマの再帰要素:マングースモデリング

    3. Javaからmongoadminコマンドを実行する方法

    4. RangeError:無効な配列バッファ長-Meteor JS