[英]How to get all data from a mongo DB collection and return them in an ArrayList with morphia
[英]Getting data from mongo db like we get in mysql?
我以这种方式将一些值插入mongodb中。
MongoClient mongo = new MongoClient( "localhost" , 27017 );
DB db = mongo.getDB("test");
DBCollection table = db.getCollection("paramDescMapper");
String key = UUID.randomUUID().toString();
String value = "{\"param0\":\"Car Make\",\"param1\":\"Car Model\",\"param2\":\"Car Variant\",\"param3\":\"Car Year\",\"param4\":\"Car Number\"}";
JSONObject jsonObject = new JSONObject(value);
// create a document to store key and value
BasicDBObject document = new BasicDBObject();
document.put("apiKey", key);
document.put("apiParamDesc", jsonObject.toString());
table.insert(document);
它以这种方式插入数据。
{ "_id" : { "$oid" : "534251125f1ab7ec747298cd"} , "apiKey" : "1eb9b9e3-3af1-4b25-b7ea-1f2fcb1d9af6" , "apiParamDesc" : "{\"param0\":\"Car Make\",\"param1\":\"Car Model\",\"param2\":\"Car Variant\",\"param3\":\"Car Year\",\"param4\":\"Car Number\"}"}
现在我想使用apiKey获取apiParamDesc值。 就像我们如何在mysql中获取数据一样。
选择apiParamDesc其中apiKey ='1eb9b9e3-3af1-4b25-b7ea-1f2fcb1d9af6';
我在Google上搜索了很多,但找不到任何东西。 这就是我试图获取此apiParamDesc的方式
BasicDBObject whereQuery = new BasicDBObject();
whereQuery.put("apiKey", "1eb9b9e3-3af1-4b25-b7ea-1f2fcb1d9af6");
DBCursor cursor = table.find(whereQuery);
while(cursor.hasNext()) {
System.out.println(cursor.next());
}
但这给了我整整一行。 我只想在字符串中使用apiParamDesc。
请帮我。
谢谢
您可以使用聚合框架轻松地做到这一点。 下面是可以解决您的问题的示例:
// create our pipeline operations, first with the $match
DBObject match = new BasicDBObject("$match", new BasicDBObject("apiKey", "1eb9b9e3-3af1-4b25-b7ea-1f2fcb1d9af6"));
// build the $projection operation
DBObject fields = new BasicDBObject("apiParamDesc", 1);
fields.put("_id", 0);
DBObject project = new BasicDBObject("$project", fields );
// run aggregation
AggregationOutput output = collection.aggregate( match, project);
您还可以仅使用db.coll.find(< criteria >, < projection >);
BasicDBObject query = new BasicDBObject(new BasicDBObject("apiKey", "1eb9b9e3-3af1-4b25-b7ea-1f2fcb1d9af6"), new BasicDBObject("apiParamDesc", 1).append("_id", 0));
//Which is equivalent to a follwoing query
//'db.coll.find({"apiKey": "1eb9b9e3-3af1-4b25-b7ea-1f2fcb1d9af6"}, {"apiParamDesc": 1,"_id": 0});'
cursor = coll.find(query);
"I want only apiParamDesc in a String."
上更新您的另一件事"I want only apiParamDesc in a String."
,如果您要存储类似
“ apiParamDesc”:“ {\\” param0 \\“:\\” Car Make \\“,\\” param1 \\“:\\” Car Model \\“,\\” param2 \\“:\\” Car Variant \\“,\\” param3 \\“ :\\“ Car Year \\”,\\“ param4 \\”:\\“ Car Number \\”}
您无法查询诸如param0
, param1
等子级别的字段。您的数据应如下所示:
{ "_id":{ "$oid":"534251125f1ab7ec747298cd" }, "apiKey":"1eb9b9e3-3af1-4b25-b7ea-1f2fcb1d9af6", "apiParamDesc":{ "param0":"Car Make", "param1":"Car Model", "param2":"Car Variant", "param3":"Car Year", "param4":"Car Number" } }
我只想在字符串中使用apiParamDesc。
但是,您无法获得仅以apiParamDesc
作为其单个字段返回的文档(对象)(我的Java生锈):
BasicDBObject whereQuery = new BasicDBObject();
whereQuery.put("apiKey", "1eb9b9e3-3af1-4b25-b7ea-1f2fcb1d9af6");
BasicDBObject fields = new BasicDBObject();
fields.put("apiParamDesc", 1);
fields.put("_id", 0);
DBCursor cursor = table.find(whereQuery, fields);
while(cursor.hasNext()) {
System.out.println(cursor.next());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.