我的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());
}
如何在数组中获取特定的键值对?
答案 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/
请遵循此代码,如果有任何不明确的地方,请告诉我,并尝试为您澄清。