我试图通过其 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/