使用mLab API的PUT请求获取更新后对象的技术咨询
如何通过mLab API获取AJAX PUT更新后的对象?
嘿,我知道你已经成功用mLab API完成了对象更新,现在就差拿到更新后的完整文档对吧?这其实是mLab API的默认行为导致的——它的PUT请求默认返回的是更新操作的统计信息(比如修改了多少条记录),而不是更新后的对象本身。不过有两种简单的方法可以解决这个问题:
方法1:使用returnNewDocument参数(推荐)
mLab的API支持MongoDB的returnNewDocument参数,只要在请求URL里加上&returnNewDocument=true,接口就会直接返回更新后的完整对象,不用额外发起请求。
修改后的代码如下:
// 先把email取出来,避免重复调用localStorage const userEmail = localStorage.getItem("email"); // 用JSON.stringify生成查询参数,避免字符串拼接的语法问题 const query = JSON.stringify({ email: userEmail, restore: 'yes' }); const updateObject = { "$set": { restore: "no" } }; $.ajax({ url: `https://api.mongolab.com/api/1/databases/db/collections/coll?apiKey=apiKey&q=${query}&returnNewDocument=true`, data: JSON.stringify(updateObject), type: "PUT", contentType: "application/json" }).done(function(updatedObj) { console.log("更新后的完整对象:", updatedObj); });
这里额外优化了两点:
- 用
JSON.stringify生成查询参数,避免手动字符串拼接可能出现的语法错误(比如特殊字符转义问题) - 用模板字符串拼接URL,可读性更好
方法2:更新后发起GET请求获取最新对象
如果因为某些原因无法使用returnNewDocument参数,你可以在更新成功后,立即发起一个GET请求,用相同的查询条件(比如用户的email)去获取最新的对象。这种方法需要两次请求,不如第一种高效,但也是可行的方案:
const userEmail = localStorage.getItem("email"); const query = JSON.stringify({ email: userEmail, restore: 'yes' }); const updateObject = { "$set": { restore: "no" } }; $.ajax({ url: `https://api.mongolab.com/api/1/databases/db/collections/coll?apiKey=apiKey&q=${query}`, data: JSON.stringify(updateObject), type: "PUT", contentType: "application/json" }).done(function(updateResult) { // 更新成功后,发起GET请求获取最新对象 return $.ajax({ url: `https://api.mongolab.com/api/1/databases/db/collections/coll?apiKey=apiKey&q=${JSON.stringify({ email: userEmail })}`, type: "GET", contentType: "application/json" }); }).done(function(updatedObj) { console.log("更新后的完整对象:", updatedObj); });
总结:优先选择方法1,一次请求就能拿到更新后的对象,既高效又简洁。
内容的提问来源于stack exchange,提问作者Jasdeep Singh Chhabra
相关产品推荐
相关产品推荐

