【问题标题】:How to write the aggregation query in Java for MongoDB如何在 Java 中为 MongoDB 编写聚合查询
【发布时间】:2019-08-19 04:57:28
【问题描述】:

我必须根据 Object 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"), "name" : "Ramoji Rao Y", "age" : 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);

    }

}

没有产生任何结果,你能帮忙吗?

【问题讨论】:

标签: java mongodb aggregation


【解决方案1】:

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

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

【讨论】:

  • 非常感谢您的快速回复,但效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
相关资源
最近更新 更多