R如何向MongoDB发出POST请求

R如何向MongoDB发出POST请求,r,json,mongodb,api,post,R,Json,Mongodb,Api,Post,我目前正在处理一个在线数据库中的数据。我通过API访问数据,当我一次检索所有数据时,API就会起作用。但这会使我的系统变慢,所以我只想请求过滤后的数据(直到现在我才这样做)。这是获取整个数据集的方法: #-------------------------------# # packages # #-------------------------------# library(httr) library(jsonlite) #-------------

我目前正在处理一个在线数据库中的数据。我通过API访问数据,当我一次检索所有数据时,API就会起作用。但这会使我的系统变慢,所以我只想请求过滤后的数据(直到现在我才这样做)。这是获取整个数据集的方法:

#-------------------------------#
#          packages             #
#-------------------------------#
library(httr)
library(jsonlite)

#-------------------------------#
#         API requests          #
#-------------------------------#

##  get all data at once  ##
url <- "https://www.eter-project.com/api/3.0/HEIs/full"
raw_result <- GET(url)

#-------------------------------#
#       data processing         #
#-------------------------------#

# 'status_code' (if request worked) and 'content' (APIs answer) important
names(raw_result) 

# '200' tells us that server received request
raw_result$status_code 

# translate Unicode into text
this.raw.content <- rawToChar(raw_result$content) 

# transform json into workable format for R
mydata <- fromJSON(this.raw.content, flatten = TRUE) 

class(mydata)
dim(mydata)
我想过滤几年和几个国家的数据,以便只获得我目前想要处理的数据。过滤器的结构将是
{“BAS.REFYEAR.v”:2011,“BAS.COUNTRY.v”:“AT”}

有人知道我如何在POST请求中实现这一点吗


到目前为止,我做了一些不顾一切的尝试,试图将过滤器包含到POST请求中(例如,
raw_result您可以尝试将所需的JSON构建为列表列表。但是,我发现显式提供JSON和手动添加内容类型更容易:

query <- '{
  "filter": { "BAS.REFYEAR.v": 2011,  "BAS.COUNTRY.v": "AT"},
  "fieldIds": {},
  "searchTerms": []
}'
url <- "https://www.eter-project.com/api/3.0/HEIs/query"
raw_result <- httr::POST(url = url, body = query, content_type_json())

query您是否尝试过
httr::POST()
?顺便说一句,CRAN上有专门的软件包用于与MongoDB接口。是的,我尝试过
POST(url,\u something\u)
还查看了很多讨论、博客帖子、文档等。但我的问题是在技术上在通话中实施过滤。请将您的问题包括您尝试过的内容和尝试的相关结果。顺便说一句,您是否阅读了以下内容:?太棒了,效果非常好。我仍然对名称有问题,因为其中有许多特殊字符(例如数据集中的
Alberta koledža
在R中显示为
Alberta koledž¾a
)。有没有办法解决这个问题,例如,使用UTF-8?@huan,看起来像koledža的UTF-8表示,用类似拉丁语-1的8位编码进行解释。但请不要在已解决的问题上添加其他问题。
myquery <- '{
  "filter": {"BAS.REFYEAR.v": 2015, "BAS.COUNTRY.v": "LV"},
  "fieldIds": {},
  "searchTerms": []
  }'

url <- "https://www.eter-project.com/api/3.0/HEIs/query"

raw_result <- POST(url, body = myquery, content_type_json())
query <- '{
  "filter": { "BAS.REFYEAR.v": 2011,  "BAS.COUNTRY.v": "AT"},
  "fieldIds": {},
  "searchTerms": []
}'
url <- "https://www.eter-project.com/api/3.0/HEIs/query"
raw_result <- httr::POST(url = url, body = query, content_type_json())