从数组MongoDB中删除列表项

时间:2014-04-14 04:29:01

标签: ajax node.js mongodb mongoose

我正在使用mongoose创建一个节点应用程序并在MongoDB中存储信息。我试图使用DELETE请求从存储在mongodb中的数组中删除列表项。每个列表项都是一个对象,例如:

"budgets" : [
    { 
        "name" : "check",
        "value" : 100,
        "expense" : false,
        "uniqueId" : 0.1224423
    },
    { 
        "name" : "bagel",
        "value" : 5,
        "expense" : true,
        "uniqueId" : 0.12424214
    }
]

我在网址中发送了一个paramer,其目标是" uniqueId"。我想通过调整它的uniqueId并从列表中删除来删除预算[1]。我该怎么做?这是我正在尝试但它无法正常工作:

router.delete('/users', function(req, res){
    if (req.session.passport.user == undefined){
        res.json({success: "false"});
    } else{
        regUser.findOneAndUpdate(
            { username:req.user.username },
            { $pull: { budgets : { uniqueId: req.param('id') }} }, 
            {new: true},
            function(err, data){
                if(err) return console.log(err);
                res.json(data.budgets);
            });
    }
});

我希望regUser.update的回调函数返回更新的信息,但由于信息没有被更新,它只是返回原始数据。那么我该如何删除包含" uniqueId"的列表项呢?我作为参数传递?

1 个答案:

答案 0 :(得分:0)

我实现了findOneAndUpdate方法(感谢Neil Lunn)。我也意识到问题与我在URL中传递的参数有关。在我的列表中,uniqueId是一个浮点数,但我得到了一个String。所以我将参数传递给了解析

router.delete('/users', function(req, res){
    if (req.session.passport.user == undefined){
        res.json({success: "false"});
    } else{
        regUser.findOneAndUpdate(
            { username:req.user.username },
            { $pull: { budgets : { uniqueId: parseFloat(req.param('id')) }} }, 
            function(err, data){
                if(err) return console.log(err);
                res.json(data.budgets);
            });
    }
});