使用java从Mongo集合中获取键值数组

时间:2014-02-16 13:52:10

标签: java mongodb

我的Mongo系列就像:

db.user.find()
{"id":"11","name" : "a1", "age":"12", "add":"assddd"}
{"id":"11","name" : "a2", "age":"12", "add":"assddsaddd"}
{"id":"10","name" : "b2", "age":"12", "add":"assddsaddd"}

我只需要为name获取数据并创建一个数组。

示例我需要仅为id = 11获取数据所以我的输出应该是:

name:[a1,a2]

我的Java代码如下:

//Mongo Connection
        Mongo mongo = new Mongo("localhost", 27017);
        DB db = mongo.getDB("test");

        DBCollection table = db.getCollection("user");

        BasicDBObject searchQuery = new BasicDBObject();
        searchQuery.put("id", "11");

        DBCursor cursor = table.find(searchQuery);
        DBObject resultElement = null;
        resultElement = cursor.next();

         Object son = JSON.parse(resultElement.toString());
         System.out.println(son);

        while (cursor.hasNext()) {
            System.out.println(cursor.next());
        }

如何在数组中获取特定的键值对?

1 个答案:

答案 0 :(得分:2)

您需要使用' name'的汇总框架和分组。字段并使用addToSet构造这些名称的数组。

db.user.aggregate(
    [
        { $match : {  id : "11" } },
        { $group : { _id : "$id", name : { $addToSet : "$name" } } }

    ])

这将提供以下文件:

{
    "_id" : "11",
    "name" : [ "a2", "a1"] 
}

然后使用光标检索名称字段数组。

修改

您可以在Java中构建聚合函数,如下所示:

    MongoClient mongoClient = null;

    try {
        mongoClient = new MongoClient("localhost", 27017);
    } catch (UnknownHostException e) {}

    DB db = mongoClient.getDB("test");

    DBCollection collection = db.getCollection("user");

    DBObject match = new BasicDBObject("$match", new BasicDBObject("id", "11"));
    DBObject groupFields = new BasicDBObject("_id", "$name");
    groupFields.put("name", new BasicDBObject("$addToSet", "$name"));
    DBObject group = new BasicDBObject("$group", groupFields);

    AggregationOutput output = collection.aggregate(match, group);

    Iterable<DBObject> itResult = output.results();

    for (DBObject dbo : itResult) {
        List<String> items = (List<String>) dbo.get("name");
        for(String item : items){
            System.out.println(item);
        }

    }

通过使用DBObject,您可以构建聚合函数。有关如何在Java中执行聚合函数的更多详细信息,请查看此处。 http://docs.mongodb.org/ecosystem/tutorial/use-aggregation-framework-with-java-driver/

请遵循此代码,如果有任何不明确的地方,请告诉我,并尝试为您澄清。