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

更新時にプロパティの値がnullの場合、そのプロパティをレコードに追加しないでください

    このように書くことはしませんが、コードが失敗する理由を説明します。

    問題は$setブロックです

    渡された更新オブジェクトに値を具体的に設定することを選択しています。値がundefinedの場合 あなたはmongoにそれをnullに設定するように強制しています 。

    これが問題です

    たとえば、DBの場合:

    {
        "_id" : ObjectId("ns8f9yyuo32hru0fu23oh"),
        "name" : "firstTest",
        "nickname": "jack",
        "__v" : 0
    }
    

    testToUpdate = { name: 'foo' }を渡した場合 最終的には

     Test.update({ ... }, { $set: { name: 'foo', nickname: undefined }}
    

    updatedValues.nicknameを取得しているため 引数から外れ、それは定義されていません

    欲しい

    Test.update({ ... }, { $set: updatedValues }
    

    これは

    に翻訳されます
    Test.update({ ... }, { $set: { name: 'foo' } }
    

    ニックネームのキーを提供しなくなったため、undefined/nullに設定されていません。

    私はマングースプラグインを使用し、フィールドをモデルに手動で渡すことを心配しません( github.com/autolotto/mongoose-model-update

    • 更新可能なフィールドを定義してから、model.update(req.body)を実行するだけです。 このすべてについて心配する必要はありません
    • プラグインを使用したくない場合でも、Test.findByIdAndUpdate(id, { name, nickname }, callback)を実行できます。


    1. 1回のクエリでmongoから複数のドキュメントを削除する

    2. Mongodbの低速更新ループ

    3. 異なるフィールドでグループ化する方法

    4. お誕生日おめでとうApacheHBase! 10年間の回復力、安定性、パフォーマンス