当前位置: 首页 > 知识库问答 >
问题:

MongoDb Java驱动程序v3.x和聚合框架

薛征
2023-03-14

我有一个包含联系人的集合,每个联系人文档都有firstnamelastname属性。

现在我想使用Java和版本3.2中的MongoDb Java驱动程序查询数据库。

db.getCollection('contacts').aggregate(
     {
           $project:{
                fullName:{
                   $concat: [ "$firstName", " ", "$lastName" ]
                }
            }
      },
      {
            $match:{
                fullName:"John Doe"
            }
       }
);
AggregateIterable<Document> documents = contactUserCollection.aggregate(Arrays.asList(project(computed("fullName", "$firstName $lastName")), match(eq("fullName", firstLastName))));

谢谢。

共有1个答案

雍焱
2023-03-14

您可以尝试以下方法:

/*
    MONGO SHELL : 
    var pipeline = [         
        { 
            "$project": { 
                "otherfieldsA": 1, 
                "otherfieldsB": 1, 
                "otherfieldsC": 1, 
                "fullName": { 
                    "$concat": [ "$fistName", " ", "$lastName" ] 
                } 
            } 
        } 
        { 
            "$match": { "fullName": "John Doe" }
        }
    ];
    db.contacts.aggregate(pipeline);

*/

public class JavaAggregation {
    public static void main(String args[]) throws UnknownHostException {

        MongoClient mongo = new MongoClient();
        DB db = mongo.getDB("test");

        DBCollection coll = db.getCollection("contacts");

        // create the pipeline operations, build the $project operations
        BasicDBList concatenate = new BasicDBList();
        concatenate.add("$firstName");
        concatenate.add(" ");
        concatenate.add("$lastName");

        DBObject fullName = new BasicDBObject("$concat", concatenate);

        DBObject fields = new BasicDBObject("otherfieldsA", 1);
        fields.put("otherfieldsB", 1);
        fields.put("otherfieldsC", 1);
        fields.put("fullName", fullName);

        DBObject project = new BasicDBObject("$project", fields);

        // create the $match operator
        DBObject match = new BasicDBObject("$match",
                            new BasicDBObject("fullName", "John Doe")
                         );
        AggregationOutput documents = coll.aggregate(match, project, group, sort);

        for (DBObject result : documents.results()) {
            System.out.println(result);
        }
    }
}
 类似资料:
  • 我开始在我的应用程序中使用MongoDB。我正在使用Robo3T学习和测试查询,现在,我正在将查询翻译成C#。 我对蒙古机器人3T的质疑 在Robo 3T上运行上述脚本,其检索到以下结果: 现在,我试图在我的. NET MVC项目上重现这个结果,我面临着将子字符串转换为C#的困难。 C#代码 这种方式很好,但是,它是按整个字符串日期分组的,我想按短字符串日期分组,如:“2019-03-01”。 我

  • 我的目标是使用聚合框架创建一个管道来对我的数据进行分组,然后将这个管道与java驱动程序一起使用。MongoDB v4.0.3 我使用MongoDB Compass创建了以下管道(减少到重要部分): 这导致以下(生成的)Java代码: 集合中$组阶段之前的数据如下所示: $组阶段应返回以下数据结构: 问题所在 Mongo Compass按预期预览了阶段的结果,但使用java驱动程序的阶段的结果非常

  • 我想在Mongo 3.2中执行聚合,如下所述,但在Java中: https://docs.mongodb.org/master/reference/operator/aggregation/lookup/#pipe._S_lookup 目前,我的java查询对象非常简单: 除了按employeId进行筛选外,我还想加入公司的此集合(其中employee.company\u id=company.i

  • 我遇到了以下情况。我使用Apache Felix作为OSGi服务实现,使用Apache Karaf作为OSGi容器。karaf中有一个bundle,它应该通过hibernate将一些数据保存到数据库中,但我总是得到一个SQLException:没有找到合适的驱动程序

  • 我是mongo的新手。 我试图得到一个文档的子文档,这是我的文档: 我想得到这个子文档: 我想我需要使用这些类:http://php.net/manual/en/mongocollection.aggregate.php但我没有将它用于我的manager类实例:http://php.net/manual/en/class.mongodb-driver-manager.php. PHP手册没有说明如

  • 我正在尝试创建一个简单的应用程序,它将我站点上每个网页的页面视图写给Cassandra。我想写每5分钟的累积页面浏览量从一个逻辑小时开始。 我的代码如下所示: 我只需要在聚合5分钟后写,而不是每次更新。有可能吗?阅读这里表明,不使用低级API,可能是不行的,我正试图避免使用低级API,因为这似乎是一个足够简单的任务,可以用更高级的API来完成。