2016-09-02 2 views
0

내가 몽구스몽구스 찾을 수 및 업데이트 배열의

{ 
    "_id": { 
     "$oid": "57c910721e5197030038d8c5" 
    }, 
    "firstname": "xyz", 
    "schoolId": "ChIJI_40EALkDDkRs-2n_kQqPRA", 
    "email": "[email protected]", 
    "image_url": "cc7b0f23cea00964301ca225c6f3430a", 
    "lastname": "abc", 
    "rating": 1, 
    "review": "Gr8", 
    "voters": [ 
     "[email protected]" 
    ], 
    "time": { 
     "$date": "2016-09-02T05:38:58.966Z" 
    }, 
    "__v": 0 
}, 

{ 
    "_id": { 
     "$oid": "57c910721e5197030038d8c4" 
    }, 
    "firstname": "xyz", 
    "schoolId": "sffsdssfsfsfdssdss", 
    "email": "[email protected]", 
    "image_url": "cc7b0f23cea00964301ca225c6f3430a", 
    "lastname": "abc", 
    "rating": 1, 
    "review": "Gr8", 
    "voters": [ 
     "[email protected],[email protected]" 
    ], 
    "time": { 
     "$date": "2016-09-02T05:38:58.966Z" 
    }, 
    "__v": 0 
} 

의 데이터를 다음하고 난 쿼리 위

var query = { _id: mongoose.Types.ObjectId(req.body.id) }; 

    var update = { $addToSet: { 'voters': req.body.email } }; 
    var options = { upsert: false, 'new': false }; 

    Review.findByIdAndUpdate(query, update, options, function (err, doc) { 
     if (err) { 
      res.json(err); 
     } 
     res.json({ message: "Thanks :)" }); 
    }); 

가 잘 작동 유권자 배열 업데이트에 다음 쿼리를 사용하고 있지만 이메일 경우 원하는 유권자 배열에서 발견 된 후 오류 메시지를 던지면 유권자 배열을 업데이트하지 않고 $ addToSet이 오류 메시지를 표시하지 않습니다.

답변

0

$addToSet 동작은 중복 된 항목이 세트에 추가되지 않았 음을 확인하며 기존 중복 요소에는 영향을주지 않습니다.

당신은 그것을을 시도 할 수 있습니다 : voters 존재 여부를 확인하는 대신 findByIdAndUpdate

var query = { _id: req.body.id ,'voters': {$nin: [req.body.email]}}; 

var update = { $push: { 'voters': req.body.email } }; 
var options = { upsert: false, 'new': false }; 

Review.findOneAndUpdate(query, update, options, function (err, doc) { 
    if (err) { 
    return res.status(500).send(err); 
    } 
    if (!doc) { 
    return res.status(400).send({msg: 'Already exist voters or not found'}); 
    } 
    return res.status(200).send({ message: "Thanks :)" }); 
}); 
+0

findOneAndUpdate를 사용하는 $nin를 사용 나를 한번 시도해 보자 이미 유권자가 존재 항상 나에게이 메시지를주고 당신에게 –

+0

를 업데이트 또는 찾을 수 없음 ' –