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

Upsertで更新をtrueとして使用しているときにデフォルト値が設定されない

    findOneAndUpdateで作成された場合、ドキュメントにデフォルトを追加するため (クエリの前には存在しませんでした)、更新でフィールドを指定しなかった場合は、 setDefaultsOnInsert

    upsertの場合 およびsetDefaultsOnInsert どちらもtrue 、レコードが見つからず、新しいレコードが作成された場合、デフォルトが設定されます。これにより、レコードが存在するかどうかを確認し、存在しない場合は、デフォルトが設定されていることを確認するために「保存」を使用して新しいレコードを作成するワークフローがスキップされます。 。

    同じ問題が発生しました(findOneAndUpdateで作成されたレコード upsert: trueを使用 )およびフィールドのデフォルト値は、スキーマに含まれていてもレコードに追加されませんでした。これは、findOneAndUpdateを使用する場合のデフォルトの追加に関するものです。 'created'フィールドの更新をスキップするためではなく、ドキュメントを作成するため。

    例:

    User.findOneAndUpdate({email: user.email}, user, {upsert: true, setDefaultsOnInsert:true}, ...)
    


    1. Tornado / Motorでの集約の失敗:不明なオブジェクトMotorAggregationCursorが生成されました

    2. SpringDataMongoDBはPOJOを排除します

    3. redisのハッシュから特定のパターンに一致するすべてのキーを取得するにはどうすればよいですか?

    4. mongoDBスキーマのフラット化