Pracuję na jak i w przeciwieństwie do sekcji obrazu. Gdy użytkownik lubi obraz, popycha userID do tablicy w MongoDB. Gdy użytkownik włącza obraz, usuwa userID z tablicy. Próbuję to zrobić za pomocą $addToSet i $pull.

Pytanie: Jak mogę to zrobić w jednym bloku zamiast pisać dwa oddzielne bolck dla tych dwóch? Obecnie używam zmiennej opr, ale nie działa. Jak mogę to działać?

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"
                            }
                        })
                    }
                })
            })
        }
    }
);
0
Prasanth Bendra 3 grudzień 2013, 16:20

2 odpowiedzi

Najlepsza odpowiedź

Myślę, że to powinno działać, aby połączyć obie zapytania i rozwiązać 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, ...);
1
robertklep 3 grudzień 2013, 12:29

Możesz zrobić coś takiego:

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"
                            }
                        })
                    }
                })
            })
        }
    }
);
0
Anthonny 3 grudzień 2013, 12:46