mongodb - MongoLab 通过 CURL/Golang-http 使用 HTTP PUT 删除多个集合不起作用

标签 mongodb curl go mlab

我试图通过其 HTTP 接口(interface)删除托管在 MongoLab 服务中的 MongoDb 数据库中集合中的多个文档。这是我在尝试实现它时使用的 CURL 请求

 curl -H "Content-Type: application/json" -X PUT  "https://api.mongolab.com/api/1/databases/mydb/collections/mycoll?q={\"person\":\"554b3d1ae4b0e2832aeeb6af\"}&apiKey=xxxxxxxxxxxxxxxxx"

我基本上希望从集合中删除具有匹配查询的所有文档。 位于 http://docs.mongolab.com/restapi/#view-edit-delete-document 的 Mongolab 文档建议 “在正文中指定一个空列表等同于删除与查询匹配的文档。” 。但是我如何在 PUT 请求正文中发送空列表?

这是我用来实现上述PUT请求的Golang代码

client := &http.Client{}
postRequestToBeSentToMongoLab, err := http.NewRequest("PUT","https://api.mongolab.com/api/1/databases/mydb/collections/mycoll?q={\"person\":\"554b3d1ae4b0e2832aeeb6af\"}&apiKey=xxxxxxxxxxxxxxxxx",nil )
postRequestToBeSentToMongoLab.Header.Set("Content-Type", "application/json") //http://stackoverflow.com/questions/24455147/go-lang-how-send-json-string-in-post-request
responseFromMongoLab, err := client.Do(postRequestToBeSentToMongoLab)

它返回 null 在这两种情况下(Golang 和 CURL 的 PUT 请求的情况)。如何让它工作,以便它删除所有匹配查询的文档?

最佳答案

我想您需要传递一个空的 json 数组作为 PUT 消息的有效负载。使用 curl,它会是这样的:

curl -H "Content-Type: application/json" -X PUT -d '[]' "https://api.mongolab.com/api/1/databases/mydb/collections/mycoll?q={\"person\":\"554b3d1ae4b0e2832aeeb6af\"}&apiKey=xxxxxxxxxxxxxxxxx"

在Go代码中,你需要这样写:

client := &http.Client{}
req, err := http.NewRequest(
    "PUT",
    "https://api.mongolab.com/api/1/databases/mydb/collections/mycoll?q={\"person\":\"554b3d1ae4b0e2832aeeb6af\"}&apiKey=xxxxxxxxxxxxxxxxx",
     bytes.NewBuffer("[]")
)
req.Header.Set("Content-Type", "application/json")
reply, err := client.Do(req)

关于mongodb - MongoLab 通过 CURL/Golang-http 使用 HTTP PUT 删除多个集合不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30125018/

相关文章:

django - MongoDB 对象序列化为 JSON

mongodb - mongoDB 中更新的聚合

ruby - 无法安装 Curb - native 扩展有问题。

go - 如何使用 golang 将 cpu 信息推送到 OpenTSDB 服务器

sql - 使用 Postgres 时为 "Operator does not exist: integer =?"

MongoDB:locale::facet::_S_create_c_locale 名称无效

node.js - 从聚合迭代 Mongodb 游标

c++ - cURL 显示 SSLv3 而不是 TLSv1

php - 你如何使用 php 的 CURL 通过使用 ssh (socks...) 的服务器进行代理?

go - Linux 上 Go 中的八进制文件权限位