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

标签 java mongodb

我的 Mongo Collection 是这样的:

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"}

我只需要获取名称数据并创建一个数组。

示例我只需要获取 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());
        }

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

最佳答案

您将需要使用聚合框架并按“名称”字段进行分组,并使用 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);
        }

    }

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

请遵循此代码,如果有任何不清楚的地方,请告诉我,我会尽力为您澄清。

关于java - 使用java从Mongo集合中获取键值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21812060/

相关文章:

java - 我应该部署在 GAE 还是 AWS 上?

python - 如何使用 python 的 mongoengine 检索不同集合中的记录?

ruby-on-rails - 尝试使用 mongoid 作为 orm in rails 连接到 ec2 上的 mongodb 实例

javascript - 如何使用 Meteor 在 Mongo 中插入 N 个元素到文档中

javascript - 在 mongodb JavaScript 控制台中从数组批量插入

java - Android 中的应用程序可以在不打开电子邮件界面的情况下发送电子邮件吗?

java - while() 循环用于用户输入

java - 如何调用基类方法?

java - AWS Kinesis 客户端 Java : Setting up TRIM_HORIZON Position in Stream does not work

node.js - MongoDB/Mongoose 时间戳未更新