使用Java和SleepyMongose执行MongoDB插入
这是我在这里的第一篇文章 简而言之,我已经设置了一个MongoDB实例,并安装了一个REST服务来在其上运行命令。我选择的那个是嗜睡的人 我一直在尝试编写一个简单的Java程序来完成三件事:查找、插入和另一个查找。基本上,显示集合,插入一些内容,然后再次显示以显示更新。发现工作正常,但插入件一直给我带来麻烦 使用带有数据参数的curl,但我一直在使用Java的HttpURLConnection。如何将该数据参数添加到HttpURLConnection?以下是我一直在尝试的:使用Java和SleepyMongose执行MongoDB插入,java,mongodb,httpurlconnection,sleepy-mongoose,Java,Mongodb,Httpurlconnection,Sleepy Mongoose,这是我在这里的第一篇文章 简而言之,我已经设置了一个MongoDB实例,并安装了一个REST服务来在其上运行命令。我选择的那个是嗜睡的人 我一直在尝试编写一个简单的Java程序来完成三件事:查找、插入和另一个查找。基本上,显示集合,插入一些内容,然后再次显示以显示更新。发现工作正常,但插入件一直给我带来麻烦 使用带有数据参数的curl,但我一直在使用Java的HttpURLConnection。如何将该数据参数添加到HttpURLConnection?以下是我一直在尝试的: private st
private static void POST (String command) {
try {
// The 'command' is just going to be 'insert' for now.
URL restURL = new URL(REST + DATABASE + "/" + COLLECTION + "/_" + command);
HttpURLConnection conn = (HttpURLConnection) restURL.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.connect();
OutputStream out = conn.getOutputStream();
String x = "docs=[{'x':1}]";
out.write(x.getBytes());
out.close();
conn.disconnect();
}
catch (Exception e) {
System.out.println("Uh oh...");
e.printStackTrace();
}
}
我使用Sleepymongose的目的是否正确?有更好的选择吗?我不受任何RESTAPI的束缚,但我想把插入的内容写下来
感谢大家出于某种原因,它只有在附加了读卡器的情况下才起作用。如果我在写入后立即附加以下内容,它将非常有效:
String line, output = "";
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((line = rd.readLine()) != null)
output += line;
rd.close();
有人能解释一下吗?我碰巧在为一个Android项目编写类似的代码,并且在写一篇博文时成功地完成了以下工作 请注意,返回的数据需要在作为HttpResponse传入时进行解析。我一直在将其转换为字符串,然后提取JSON值,见下文 插入样本:
String[] link2 = {"http://XXX.XXX.XXX.XXX:27080/foo/bar/_insert", "[{\"x\":2},{\"x\":3}]"};
new HTTPPost().execute(link2);
文章的代码,你的会有所不同,因为不是专门为Android编写的。将AndroidHttpClient替换为HttpClient。注意用于将文档指定为密钥的BasicNameValuePair
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
protected HttpResponse doInBackground(String... params) {
String link = params[0];
String value = params[1];
HttpPost post = new HttpPost(link);
AndroidHttpClient client = AndroidHttpClient.newInstance("Android");
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("docs", value));
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
return client.execute(post);
} catch (IOException e) {
return null;
} finally {
client.close();
}
}
要提取JSON值,请执行以下操作:
public String parseJSON(String toParse)
{
try {
JSONObject jObject = new JSONObject(toParse);
String aJsonString = jObject.getString("ok");
JSONArray jArray = jObject.getJSONArray("results");
for (int i = 0; i < jArray.length(); i++) {
try {
JSONObject oneObject = jArray.getJSONObject(i);
// Pulling items from the array
String oneObjectsItem = oneObject.getString("link");
return oneObjectsItem;
} catch (JSONException e) {
// Oops
}
}
} catch (Exception ex) {
}
return "";
}
public String parseJSON(String toParse)
{
try {
JSONObject jObject = new JSONObject(toParse);
String aJsonString = jObject.getString("ok");
JSONArray jArray = jObject.getJSONArray("results");
for (int i = 0; i < jArray.length(); i++) {
try {
JSONObject oneObject = jArray.getJSONObject(i);
// Pulling items from the array
String oneObjectsItem = oneObject.getString("link");
return oneObjectsItem;
} catch (JSONException e) {
// Oops
}
}
} catch (Exception ex) {
}
return "";
}