我无法更新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);
});
};
我可以使用console.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时,我仍然使用同一个文件,而不是编辑过的名称。令人困惑的部分是,为什么console.log(结果)会显示编辑后的名称。我真的很感激任何帮助。感谢。
答案 0 :(得分:1)
您没有将唯一密钥传递给数据库查询。您的意图是更改存储在数据库中的现有记录的名称,但您不会这样做。相反,您尝试查找与新名称值匹配的记录,并始终返回已发送到服务器的值。
相反,您需要使用AJAX请求传递唯一标识符,使用URL最有意义。
self::
服务器端代码:
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);
});
};