我正在尝试使用 Data Api 将文档插入 MongoDB。我已经尝试这样做两天了,但一无所获。它一直告诉我 400 Bad request.
当我发出帖子请求来查找文档列表时,它起作用了。但是当我想要deleteOne、updateOne、findOne、insertOne 和 insertMany 时,我收到 400 Bad request。
我已授予我的 Api 密钥读写权限。我不知道该怎么办。
这就是我调用该函数的方式:
await MongoDB.insertData(collection: 'PostedJobs', document: {
//All other fields are strings besides the ones I commented on
"nick_name": "",
"image_url": '',
"username": myUserName,
"title": title,
'searchCriteria': list, // list string
"description": description,
'category': category, // this is map of <string,string>
"pushToken": "",
"time": DateTime.now().toIso8601String(),
"from": "posted",
"location": location,
"city": city.replaceAll("State", "").trim(),
"country": countryName,
"area": area,
'latlng': null,
'budget': !hasBudget ? 0 : int.tryParse(budget!),
'seen': [],
}).then((_) {
EasyLoading.dismiss();
Get.back();
});
这就是功能:
static insertData({
required String collection,
required document,
}) async {
await http
.post(
Uri.parse(
'https://data.mongodb-api.com/app/myappid/endpoint/data/v1/action/insertOne'),
headers: {
'Content-Type': "application/json",
'api-key': APIKEY,
},
body: json.encode({
"dataSource": "MyCluster",
"database": "Database",
"collection": collection, //PostedJobs
"document": document, //The document parameter I passed
}))
.then((value) {
if (value.statusCode == 200)
print('ok');
else {
print(value.request);
throw ErrorDescription(value.reasonPhrase!);
}
}, onError: (c, v) {
print(c);
print(v);
});
}
另外:我在Firebase云函数和MongoDB触发函数(Typescript)中使用了上述函数,没问题,但在dart本身中我似乎找不到问题。请我需要一双额外的眼睛。
以下是 MongoDB 的示例:
curl --request POST \
'https://data.mongodb-api.com/app/<Data API App ID>/endpoint/data/v1/action/insertOne' \
--header 'Content-Type: application/json' \
--header 'api-key: <Data API Key>' \
--data-raw '{
"dataSource": "Cluster0",
"database": "todo",
"collection": "tasks",
"document": {
"status": "open",
"text": "Do the dishes"
}
}'
在塞利姆多安的帮助下。我已经能够继续前进了。我必须去基本客户端来解决我的问题。这是链接:
从 2024 年 9 月开始收到此错误的任何人都应该注意,MongoDB 数据 API 已被弃用。您需要找到其他解决方案。