Java MongoDB集合中的查询字段。
我试图查询mongodb集合中的特定字段。以下是我的代码和输出:Java MongoDB集合中的查询字段。,java,mongodb,Java,Mongodb,我试图查询mongodb集合中的特定字段。以下是我的代码和输出: Mongo m = new Mongo(); DB db = m.getDB( "mydb" ); DBCollection coll = db.getCollection("student") ; // adding data BasicDBObject moz = new BasicDBObject(); moz.put("Name", "Mozammil"); c
Mongo m = new Mongo();
DB db = m.getDB( "mydb" );
DBCollection coll = db.getCollection("student") ;
// adding data
BasicDBObject moz = new BasicDBObject();
moz.put("Name", "Mozammil");
coll.insert(moz);
DBCursor cursor = coll.find();
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
这将返回以下内容:
{ "_id" : { "$oid" : "4f5a4477c5e80f71ece56797"} , "Name" : "Mozammil"}
但是,我只想要名称部分。在谷歌上搜索一下,这应该就行了
DBCursor cursor = coll.find({}, {'Name':1});
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
但它不起作用。请帮忙 您可以通过光标对返回的文档使用get来获取要查找的字段。像这样:
System.out.println(cursor.next().get("key"));
看看
我知道你已经接受了答案,但这并不是你想要的 以下是一些工作代码:
// get Mongo set up...
Mongo m = new Mongo();
DB db = m.getDB( "test" );
DBCollection coll = db.getCollection("test");
// insert a test record
coll.insert(new BasicDBObject("Name","Wes").append("x", "to have a second field"));
// create an empty query
BasicDBObject query = new BasicDBObject();
// configure fields to be returned (true/1 or false/0 will work)
// YOU MUST EXPLICITLY CONFIGURE _id TO NOT SHOW
BasicDBObject fields = new BasicDBObject("Name",true).append("_id",false);
// do a query without specifying fields (and print results)
DBCursor curs = coll.find(query);
while(curs.hasNext()) {
DBObject o = curs.next();
System.out.println(o.toString());
}
// do a query specifying the fields (and print results)
curs = coll.find(query, fields);
while(curs.hasNext()) {
DBObject o = curs.next();
System.out.println(o.toString());
}
第一个查询输出:
{ "_id" : { "$oid" : "4f5a6c1603647d34f921f967"} , "Name" : "Wes" , "x" : "to have a second field"}
{ "Name" : "Wes"}
第二个查询输出:
{ "_id" : { "$oid" : "4f5a6c1603647d34f921f967"} , "Name" : "Wes" , "x" : "to have a second field"}
{ "Name" : "Wes"}
这个效果很好 要获取所有嵌套键:
public static ArrayList<String> getKeys(Document it1) throws JSONException {
ArrayList<String> result = new ArrayList<String>();
ArrayList<String> resultTemp;
String temp;
Document doc;
JSONArray jsa;
int len, i;
System.out.println(it1);
String js = it1.toJson();
JSONObject js1 = new JSONObject(js);
Iterator<String> keys = js1.keys();
while (keys.hasNext()) {
String key = keys.next();
if (key.equals("_id")) {
result.add(key);
continue;
}
System.out.println(key);
temp = js1.get(key).toString();
if (temp.contains(":")) {
jsa = new JSONArray(temp);
len = jsa.length();
for (i = 0; i < len; i++) {
JSONObject object = jsa.getJSONObject(i);
doc = Document.parse(object.toString());
System.out.println(doc);
resultTemp = getKeys(doc);
for (String keyTemp : resultTemp) {
if (!result.contains(key + "." + keyTemp))
result.add(key + "." + keyTemp);
}
}
} else {
result.add(key);
}
}
return result;
}
publicstaticarraylistgetkeys(文档it1)抛出JSONException{
ArrayList结果=新建ArrayList();
arraylistresulttemp;
字符串温度;
文件文件;
JSONArray jsa;
内伦,我;
系统输出打印项次(it1);
字符串js=it1.toJson();
JSONObject js1=新的JSONObject(js);
迭代器keys=js1.keys();
while(keys.hasNext()){
String key=keys.next();
if(key.equals(“_id”)){
结果。添加(键);
继续;
}
系统输出打印项次(键);
temp=js1.get(key.toString();
如果(临时包含(“:”){
jsa=新JSONArray(临时);
len=jsa.length();
对于(i=0;i
使用上面的查询,它将为您提供文档的所有字段。在这里,您还将得到嵌套字段 您应该改为修改打印。与其从
cursor.next()
中转储整行,不如将其放入JSONObject
中,然后使用JSONObject方法只打印所需的字段。实际上,查询本身存在另一个问题。我的意思是只使用第一个find(),然后只解析打印循环中的name字段。哦,添加逗号而不是冒号:(很抱歉,它不起作用。它仍然输出{“\u id”:{“$oid”:“4F5A39B0C5E8BF828432CB4”},“Name”:“Mozammil”}这就成功了:System.out.println(cursor.next().get(“Name”);我给出的语法只会给出请求的字段和_id(mongo shell版本“:”的ofc除外)-无效java)。cursor.next().get(key)检索整个对象,然后手动提取。这可能会将整个文档传输到客户端,根据文档大小,这可能会很昂贵。如何使用此方法从同一对象打印多个键?虽然此代码段可能解决了问题,但确实有助于提高质量请记住,你是在为将来的读者回答这个问题,而这些人可能不知道你的代码建议的原因。请编辑更多信息。不鼓励只使用代码和“尝试此”回答,因为它们不包含可搜索的内容,也不解释为什么有人应该“尝试此”.我们在这里努力成为知识的来源。好吧。也许你是对的,但一开始我认为如果我提供更多关于它的信息,那么答案就没有意义了。知识很重要,但一颗探索的心更有价值
public static ArrayList<String> getKeys(Document it1) throws JSONException {
ArrayList<String> result = new ArrayList<String>();
ArrayList<String> resultTemp;
String temp;
Document doc;
JSONArray jsa;
int len, i;
System.out.println(it1);
String js = it1.toJson();
JSONObject js1 = new JSONObject(js);
Iterator<String> keys = js1.keys();
while (keys.hasNext()) {
String key = keys.next();
if (key.equals("_id")) {
result.add(key);
continue;
}
System.out.println(key);
temp = js1.get(key).toString();
if (temp.contains(":")) {
jsa = new JSONArray(temp);
len = jsa.length();
for (i = 0; i < len; i++) {
JSONObject object = jsa.getJSONObject(i);
doc = Document.parse(object.toString());
System.out.println(doc);
resultTemp = getKeys(doc);
for (String keyTemp : resultTemp) {
if (!result.contains(key + "." + keyTemp))
result.add(key + "." + keyTemp);
}
}
} else {
result.add(key);
}
}
return result;
}
db.getCollection('users').aggregate([
{"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}},
{"$unwind":"$arrayofkeyvalue"},
{"$group":{"_id":null,"columns":{"$addToSet":"$arrayofkeyvalue.k"}}}
])