我试图通过数据 API 将文档插入 MongoDB Atlas。
然而,API一直返回以下错误:
缺少标头:请添加内容类型:application/json 或 application/ejson 以指定有效负载数据类型。
这是出乎意料的。正如您在下面的 deluge 脚本中看到的,“Content-Type”是在标头中指定的:
原码
// POST to MongoDB Data API
headers = Map();
headers.put("Content-Type", "application/json");
headers.put("api-key", "API-KEY");
headers.put("Access-Control-Request-Headers", "*");
data = Map();
data.put("dataSource", "cluster");
data.put("database", "database");
data.put("collection", "names");
document = Map();
document.put("full_name", "Ari Adar");
data.put("document", document);
response = invokeurl
[
url: "https://ap-southeast-2.aws.data.mongodb-api.com/app/data-***/endpoint/data/v1/action/insertOne"
type: POST
parameters: data.toString()
headers: headers
];
alert response;
经过一番调试,终于发现Data API的error response是不准确的
解决方案是脚本必须先将数据映射转换为 JSON 字符串,然后再将其传递给 invokeURL 函数。
工作代码
// POST to MongoDB Data API
headers = Map();
headers.put("Content-Type", "application/json");
headers.put("api-key", "API-KEY");
headers.put("Access-Control-Request-Headers", "*");
data = Map();
data.put("dataSource", "cluster");
data.put("database", "database");
data.put("collection", "names");
document = Map();
document.put("full_name", "Ari Adar");
data.put("document", document);
// Stringify the data map
data_string = data.toString();
response = invokeurl
[
url: "https://ap-southeast-2.aws.data.mongodb-api.com/app/data-***/endpoint/data/v1/action/insertOne"
type: POST
parameters: data_string
headers: headers
];
alert response;
我希望这可以帮助其他遇到相同错误消息的人。要是 MongoDB 能更新就好了