【问题标题】:Translating MongoDB query to a MongoDB java driver query将 MongoDB 查询转换为 MongoDB java 驱动程序查询
【发布时间】:2013-07-13 09:22:22
【问题描述】:

请帮助我使用 Java MongoDB 驱动程序将以下 MongoDB 查询转换为基于 Java 的查询。谢谢。

db.playerscorecollection.aggregate(
      { $unwind: "$scorearray"},
      { $group: { _id: { player: "$player", venue: "$scorearray.venue", score: "$scorearray.score" } } },
      { $sort: { "_id.score" : 1 } },
      { $group: { _id: "$_id.player", maxScore: { $last: "$_id.score" }, venue: { $last: "$_id.venue"} } }
)

【问题讨论】:

  • 我们很少在没有研究的情况下回答要求代码的问题,这次你有点幸运,通常这些问题都会被关闭。

标签: mongodb mongodb-java


【解决方案1】:

我没有检查语法。另外我不知道您的查询是否有效,但这是我的尝试。

        //unwind
        DBObject unwind = new BasicDBObject("$unwind", "$scorearray");
        // Now the $group operation
        DBObject groupFields = new BasicDBObject("player", "$player");
        groupFields.put("venue", "$scorearray.venue"));
        groupFields.put("score", "$scorearray.score"));
        DBObject group = new BasicDBObject("$group", new BasicDBObject("_id", groupFields));
        //sort
        DBObject sort = new BasicDBObject("$sort", new BasicDBObject("_id.score":1));
        //secondgroup
        DBObject secondGroupFields = new BasicDBObject("_id", "$_id.player")
        secondGroupFields.put("maxScore", new BasicDBObject("$last":"$_id.score"));
        secondGroupFields.put("venue", new BasicDBObject("$last":"$_id.venue"));
        DBObject secondGroup = new BasicDBObject("$group", secondGroupFields);

        // run aggregation
        AggregationOutput output = playerScoreCollection.aggregate(unwind, group,sort,secondGroup);

        Iterable<DBObject> result = output.results();
        Iterator<DBObject> iterator = result.iterator();

【讨论】:

  • 谢谢!是的,我的查询是有效的,您的解决方案也有效。
【解决方案2】:

你可以使用这个库: https://github.com/EqualExperts/mongo-shell-like-query 使用这个库,您可以使用如下查询字符串:

db.users.aggregate([{'$match':{'salary' : {$gte:'from#Long',$lte:'to#Long'}}}, { $group: {_id: '$role', 'age': {$sum: '$age' } } }, { '$sort': { 'age': -1 } }, { '$limit': 5 }])

db.users.aggregate({'$match':{'salary': {$gte:'from#Long',$lte:'to#Long'}}}, { $group: {_id:' $role', 'age': {$sum: '$age' } } }, { '$sort': { 'age': -1 } }, { '$limit': 5 })

像这个例子一样传递这些字符串: 字符串查询 = ”db.users.find( { ‘name’ : ‘John’} )”; MongoQueryParser 解析器 = new MongoQueryParser(); MongoQuery mongoQuery = parser.parse(query, new HashMap()); BasicDBList 结果 = mongoQuery.execute(mongoDB); 在我看来,它的集成和使用速度非常快。

另外还有一个很棒的库:

http://jongo.org

有了这个,你可以使用如下代码:

DB db = new MongoClient().getDB("dbname");
Jongo jongo = new Jongo(db);
MongoCollection friends = jongo.getCollection("friends");
friends.aggregate("{$project:{sender:1}}")
    .and("{$match:{tags:'read'}}")
    .and("{$limit:10}")
    .as(Email.class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多