如何在Java中为MongoDB编写聚合查询

时间:2019-03-28 12:09:21

标签: java mongodb aggregation

我必须基于对象ID将Mongbd中的两个表连接起来,然后得到结果。一个表包含员工详细信息,另一个表包含员工图像 我的数据库名称为EmployeeData 我有两个名为:employe的集合,其中包含员工信息。 和photo.files包含图像。(使用GridFS员工图像插入数据库)

在Mongo Shell波纹管查询中给出连接结果

db.employee.aggregate([
   {$match: {"_id" : ObjectId("5c9c37df3aa2359d6b998e18")}},
   {$lookup: {
     from: "photo.files",
     localField: "_id",
     foreignField: "_id",
     as: "test"
     }}
    ]);

结果为:

{“ _id”:ObjectId(“ 5c9c37df3aa2359d6b998e18”),“名称”:“ Ramoji Rao Y”,“年龄”:28,“ experiecne”:3,“ createdDate”:ISODate(“ 2019-03-28T02: 56:31.752Z“),” test“:[{” _id“:ObjectId(” 5c9c37df3aa2359d6b998e18“),” filename“:” ramoji-test-image“,” aliases“:null,” chunkSize“:NumberLong(262144) ,“ uploadDate”:ISODate(“ 2019-03-28T08:47:16.531Z”),“ length”:NumberLong(46178),“ contentType”:null,“ md5”:“ 3aca3ecc2dd5ba3a138ce76362586ee1”}]}

现在,我想用Java进行上述查询。有谁能帮助我如何使用聚合进行编写。

或其他任何简单的Java实现方式。

我已经按照Yohanaa的建议实施了 代码是

package Mongo_aggregate;

import com.mongodb.Block;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Aggregates;
import com.mongodb.client.model.Accumulators;
import com.mongodb.client.model.Projections;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;
import com.sun.prism.Image;
import com.mongodb.client.model.Filters;

import java.util.Arrays;
import java.util.List;

import javax.swing.text.html.ImageView;

import org.bson.Document;

public class Imgae_featch {
    public static void main(String[] args)
    {   
         Block<Document> printBlock = new Block<Document>(){
                public void apply(final Document document) {
                    System.out.println("Test Ramoji");
                    System.out.println(document.toJson().length());
                }
            };
        MongoClient mongoClient = MongoClients.create();
        MongoDatabase database = mongoClient.getDatabase("EmployeeData");
        MongoCollection<Document> collection = database.getCollection("employee");

        System.out.println("colletion data before is:" +collection);
        collection.aggregate(
                   Arrays.asList(
                     Aggregates.match(Filters.eq("_id", "5c9c37df3aa2359d6b998e18")),
                     Aggregates.lookup("$photo.files", "_id", "_id", "test")

                   )

                ).forEach(printBlock);

    }

}

未产生任何结果可以帮助您。

1 个答案:

答案 0 :(得分:0)

您可以将Mongo Java Driverlookup聚合一起使用。 像这样:

    collection.aggregate(
       Arrays.asList(
         Aggregates.match(Filters.eq("_id", "5c9c37df3aa2359d6b998e18")),
         Aggregates.lookup("$photo.files", "_id", "_id", "test")
       )
    ).forEach(printBlock);