2013-12-03 3 views
0

Я работаю над подобным и в отличие от раздела изображения. Когда пользователю нравится изображение, он подталкивает userID к массиву в mongodb. Когда пользователь не обращает внимания на изображение, он удаляет из массива userID. Я пытаюсь это сделать, используя $addToSet и $pull.Как назначить оператор переменной

Вопрос: Как я могу сделать это в одном блоке, а не писать два отдельных файла для этих двух? В настоящее время я использую переменную opr, но она не работает. Как я могу заставить его работать?

if(likeAction == "like"){ 
    var opr   = '$addToSet' 
} 
else if(likeAction == "unlike"){ 
    var opr   = '$pull' 
} 

Like.update( 
    { imageID: imageID }, 
    { opr : { userIDs: userID } }, 
    function(err){ 
     if(!err){ 
      Like.findOne({imageID : imageID}, function(err,like){ 
       image.likeCount  = like.userIDs.length 
       image.save(function(err){ 
        if(!err){ 
         return res.send({ 
          status: { 
           error: 0, 
           message: "Successful" 
          } 
         }) 
        } 
       }) 
      }) 
     } 
    } 
); 

ответ

1

Я думаю, что это должно работать, чтобы объединить оба запроса и решить opr вопрос:

var update = {}; 
if (likeAction === 'like'){ 
    update.$addToSet = { userIDs: userID }; 
    update.$inc  = { likeCount : 1 }; 
} else if (likeAction === 'unlike'){ 
    update.$pull = { userIDs: userID }; 
    update.$inc = { likeCount : -1 }; 
} 

Like.update({ imageID: imageID }, update, ...); 
+0

Спасибо за ответ, позвольте мне попробовать это –

+0

Спасибо, это сработало :) –

0

Вы можете сделать что-то подобное:

var opr, updateCommande = {}; 

if(likeAction == "like"){ 
    opr   = '$addToSet' 
} 
else if(likeAction == "unlike"){ 
    opr   = '$pull' 
} 

updateCommande[opr]= { userIDs: userID } 

Like.update( 
    { imageID: imageID }, 
    updateCommande, 
    function(err){ 
     if(!err){ 
      Like.findOne({imageID : imageID}, function(err,like){ 
       image.likeCount  = like.userIDs.length 
       image.save(function(err){ 
        if(!err){ 
         return res.send({ 
          status: { 
           error: 0, 
           message: "Successful" 
          } 
         }) 
        } 
       }) 
      }) 
     } 
    } 
); 
Смежные вопросы