我的 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/