繁体   English   中英

从mongo db获取数据,就像我们在mysql中获取数据一样?

[英]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 \\”}

您无法查询诸如param0param1等子级别的字段。您的数据应如下所示:

 { "_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM