2016-12-26 1 views
3

にオブジェクトを設定存在する場合、これは私が現在持っている文書です:あなたは、異なる以下のブールと、seriesId 1と2つのオブジェクトが現在存在している見ることができるようにプッシュオブジェクトそうにMongoDB

{ 
    "_id": "", 
    "title": "My Watchlist", 
    "series": [{ 
     "seriesId": 1, 
     "following": true, 
     "seasons": [] 
    }, { 
     "seriesId": 1, 
     "following": false, 
     "seasons": [] 
    }] 
} 

クエリーが_idと一致する場合は、新しいオブジェクトをシリーズにプッシュする必要があります。「シリーズ」配列内に同じ「seriesId」を持つオブジェクトが存在する場合は、そのオブジェクト内のフィールドを変更する必要があります。新しいオブジェクト。

私は現在、次のクエリがあります:私は$を使用する場合は

users.update(
    {"_id": req.body.userId}, 
    { 
     "$push": { 
      "series": {"seriesId": req.body.seriesId, "following": req.body.following} 
     } 
    }, (err, data) => { 
     if (err) 
      next(err); 
    }); 

は、それがもともと限り、私はあなたが両方使用する$プッシュすることはできません知っているようにまだ存在し、かつなかった場合には、オブジェクトを追加しない設定しますと$セット? これは何らかの方法で修正できますか、または私のスキーマを再考する必要はありますか?

+0

[Can mongo upsert array data?](http://stackoverflow.com/questions/13588342/can-mongo-upsert-array-data)の可能な複製 – MYGz

答えて

2

次の2つのupdateクエリを使用することができます:_idが見つかり、seriesIdが配列されていないされている場合、配列に新しい項目を追加し、

  • を:

    db.series.update({ 
        "_id": req.body.userId, 
        "series": { 
         "$not": { 
          "$elemMatch": { 
           "seriesId": req.body.seriesId 
          } 
         } 
        } 
    }, { 
        $addToSet: { 
         series: { 
          "seriesId": req.body.seriesId, 
          "following": req.body.following, 
          "seasons": [] 
         } 
        } 
    }, { multi: true }); 
    
  • _idが発見された場合配列内にseriesIdがある場合、配列項目を更新します。

    db.series.update({ 
        "_id": req.body.userId, 
        "series.seriesId": req.body.seriesId 
    }, { 
        $set: { 
         "series.$.following": req.body.following 
        } 
    }, { multi: true }); 
    
関連する問題