2016-09-02 7 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 :)" }); 
    }); 

が正常に動作している有権者配列更新に次のクエリを使用していますが、私は電子メールの場合は欲しいですvoters配列内に見つかった場合はエラーメッセージをスローし、単純にvoters配列を更新しない場合は$ 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

を更新しますまたは見つかりません ' –

関連する問題