我在更新mongodb中的名称时遇到问题。该名称首先由用户保存在变量中,并传递给如下函数:putAjax(editName) 然后它转到此处的函数:
function putAjax(editName) {
$.ajax({
type: "PUT",
url: "/items/"+ editName,
data: editName,
dataType: 'json',
})
.done(function(result) {
console.log("result:", result);
console.log("data successfully saved:");
})
.fail(function(jqXHR, error, errorThrown) {
console.log(jqXHR);
console.log(error);
console.log(errorThrown);
});
};
我可以控制台.log(结果),我可以看到编辑后的名称,所以我假设编辑发生了。 最后,它调用服务器上的app.put:
app.put('/items/:name', function(req, res) {
Item.find(req.params.name, function(err, items) {
if (err) {
return res.status(404).json({
message: 'Internal Server Error'
});
}
Item.findOneAndUpdate({
name: req.params.name
}, {
$set: {
name: req.params.name
}
}, { new: true },
function () {
res.json(items);
});
});
});
这是更新似乎没有发生的地方。 当我使用 mongo shell 时,我拥有的一个文档仍然具有相同的名称,而不是编辑后的名称。 令人困惑的部分是,为什么控制台.log(结果)向我显示编辑后的名称。我非常感谢这方面的任何帮助。 谢谢。
您没有将唯一键传递给数据库查询。您打算更改存储在数据库中的现有记录的名称,但您没有这样做。相反,您尝试查找与新名称值匹配的记录,并且始终返回已发送到服务器的值。
相反,您需要通过 AJAX 请求传递唯一标识符,使用 URL 最有意义。
function putAjax(id, editName) {
var payLoad = { name: editName };
$.ajax({
type: "PUT",
url: "/items/"+ id,
data: payLoad,
dataType: 'json',
})
.done(function(result) {
console.log("result:", result);
console.log("data successfully saved:");
})
.fail(function(jqXHR, error, errorThrown) {
console.log(jqXHR);
console.log(error);
console.log(errorThrown);
});
};
服务器端代码:
app.put('/items/:id', function(req, res) {
var data = req.body; // data should be validated
Item.findOneAndUpdate({ _id: req.params.id }
, { $set: data }
, { returnOriginal: false }
, function (err, result) {
if (err) {
return res.status(500).json({
message: 'Internal Server Error.'
});
}
return res.json(result);
}
);
});