2017-05-09 3 views
0

私のデータの関連リンクはすべて適切な解決策ではありません。そうでない場合は、新しいオブジェクトを挿入し、ちょうど真の虚偽または万力その逆からそれを更新する、それが存在しない場合更新されている場合は、mongooseのサブ文書用に存在しない場合は挿入してください

{ 
    "code" : "QC", 
    "is_favourite" : true 
} 

:私はこのような国を追加したい

{ 
"_id" : ObjectId("590aa0e68d4b23760d8d0e50"), 
"updatedAt" : ISODate("2017-05-08T07:03:08.314Z"), 
"createdAt" : ISODate("1987-12-31T16:00:00.000Z"), 
"Avatar" : "public/image/test.pic", 
"countries" : [ 
    { 
     "code" : "MY", 
     "is_favourite" : false, 
     "is_visited" : true, 
    }, 
    { 
     "code" : "CA", 
     "is_favourite" : true 
    } 
] 
} 

: 私のスキーマは、このようなものです。

私はコードを書いていますが、長い話のようですが、挿入モードでも正しく動作していません(このエラーが発生しました:位置演算子がクエリから必要な一致を見つけられませんでした)。私はどんなことができます....

var query = {"_id":req.params._id, "countries":{$elemMatch:{code:req.body.code}}} 
    var update = { $set: {"countries.$.is_favourite": req.body.is_favourite}} 
    var option = {"upsert": true} 

    User.findOneAndUpdate(query,update,option, function (err, user) { 

    if (err) return next(err); 
    return res.status(201).json({ 
     success: true, 
    message: 'country '+ '<'+req.body.code+'> '+ 'updated as ' 
+req.body.is_favourite 
    }); 

    }); 

答えて

1
This is what i have tested and works perfectly as expected. 
Logic is pretty clear you just need to make small changes. 


updateTestTable: function (req, res, callback) { 
     var pushData = { 
      "code": "QC", 
      "is_favourite": true 
     }; 
     console.log("INSIDE"); 
     var objectID=new mongoose.Types.ObjectId("59119107fd4790422fcb676a"); 
     test.findOne({"_id":objectID,"countries.code":pushData.code},function(err,data){ 
      console.log(JSON.stringify(data)); 
      if(data!==null){ 
       //Update Data 
       console.log("HELLO"); 
       test.findOneAndUpdate({"_id":objectID,"countries.code":pushData.code},{ $set: { "countries.$.is_favourite": false} },function(err,data){ 
        if(data){ 
         console.log("DATA UPDATED"); 
         console.log(data); 
        } 
        else{ 
         console.log("ERR",err); 
        } 
       }); 

      } 
      else{ 
       //Insert Data 
       test.findOneAndUpdate({"_id":objectID},{$push: {countries: pushData }},function(err,data){ 
        if(data){ 
         console.log("DATA INSERTED"); 
         console.log(data); 
        } 
       }); 
      } 
     }); 

    }, 
のための感謝されます
関連する問題