我得到了大约 300.000 个条目的数据集。为了存储该数据,我使用的是当前版本的 mongodb 2.2.3。我的问题是如何使用聚合框架来提高搜索性能?
这是我存储数据的示例:
{
"_id":"654311649875645643131564",
"@type":"K",
"dataSourceA":{
"name": "abc",
"price": 12.99
},
"dataSourceB":{
"name": "xyz"
}
}
在我切换到较新版本的 mongodb 之前,我在没有聚合框架的情况下处理了例如最大值的搜索,如下所示:
searchQuery = new BasicDBObject("dataSourceA.price", -1);
DBCursor cursor = collection.find().sort(searchQuery).limit(1);
该操作大约需要0.921 secs
现在我尝试了聚合框架来实现相同的结果,但想更快地找到最高价格。这是我的方法:
DBObject match = new BasicDBObject("$match", new BasicDBObject("@type", "K"));
DBObject fields = new BasicDBObject("dataSourceA.price", 1);
DBObject project = new BasicDBObject("$project", fields);
DBObject groupFields = new BasicDBObject("_id", 1);
groupFields.put("max", new BasicDBObject("$max", "$dataSourceA.price"));
DBObject group = new BasicDBObject("$group", groupFields);
Iterable<DBObject> results =
collection.aggregate(match, project, group).results();
但是这个操作需要4.837 secs
找到最高价格。那么在我的查询中可以改进什么?我认为这样的数据库应该比在 java 中迭代游标更快,当我错了时纠正我。