如何使用nodejs和mongoose从数据库中的数组中删除值

时间:2016-07-06 19:10:48

标签: arrays node.js mongodb

我试图从我的数据库中删除数组中的值,这是我从网址获取的。

我使用下面的代码,但我什么都没得到。它没有进入for循环。

app.get('/remove/:medid/:tokenid', function(req, res) {
    var medid = req.params.medid;
    var token = req.params.tokenid;
    var query = { tokenid: token, mediaid !== 'undefined' && mediaid.length > 0 }

    user.find(query).exec(function(err, result) {

        if (err) {
            res.send('erooooooor')
        }
        if (!result) {
            res.send('whooops, you dont have any media yet :)')
        } else {
            console.log('its here')
            for (var i in result.mediaid) {
                console.log(i)
                if (i == medid) {
                    user.update({ tokenid: token }, { $pull: { mediaid: medid } }, function(err, result2) {
                        if (err) {
                            res.send('an error happened')
                        } else {
                            console.log('deleted')
                                //res.send('your tokenid  is '+ token)
                        }
                    })
                } else {
                    res.send('media id didnt match')
                }
            }
        }

    });
});

我的数据库有3个对象 useridtokenid是字符串,而mediaid是一个数组

另外,我想检查我的mediaid数组是否为null,并且此代码是否存在

mediaid !== 'undefined' && mediaid.length > 0

2 个答案:

答案 0 :(得分:2)

您的json语法在以下行

中不正确
var query = {tokenid: token, mediaid !== 'undefined' && mediaid.length > 0}

您应该只是让您的查询基于令牌ID。

var query = {tokenid: token};

当你写for(var i in result.mediaid)时,对于循环的每次迭代,变量' i'被赋予当前元素的索引,而不是其值。因此,应修改if条件以检查result.mediaid[i] == medid而不是i == medid。修改后的循环应该类似于:

for(var i in  result.mediaid){
    console.log(i);
    if(result.mediaid[i] === medid){
        user.update({tokenid: token}, {$pull: {mediaid: medid}},function(err, result2){
        if (err){
            res.send('an error happened');
        }
        else{
            console.log('deleted');
            //res.send('your tokenid  is '+ token)
            }
        });
    }
}

答案 1 :(得分:0)

请你可以替换为:

.btn.button-add, .btn.button-bullet {
  background-color: transparent;
}
.btn.red-background {
  background-color: #FCC1C5;
}

更新:

我建议在app.get('/remove/:mediaid/:tokenid', function(req, res){ var medid = req.params.mediaid; var token = req.params.tokenid; var query = {tokenid: token, mediaid !== 'undefined' && mediaid.length > 0}

之后打印

我希望帮助你 - 何塞卡洛斯拉莫斯