2017-05-09 73 views
0

我看到我的數據的每個相關鏈接沒有一個適當的解決方案。 我的模式是這樣的:更新,如果存在插入,如果它不存在子文檔在貓鼬

{ 
"_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 
    } 
] 
} 

我想補充一個國家是這樣的:

{ 
    "code" : "QC", 
    "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); 
        } 
       }); 
      } 
     }); 

    }, 
相關問題