我正在使用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"的列表项呢?我作为参数传递?
答案 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);
});
}
});