Как написать запрос агрегации в Java для MongoDB - PullRequest
0 голосов
/ 28 марта 2019

Я должен объединить две таблицы в Mongbd на основе идентификатора объекта и получить результат.Одна таблица содержит сведения о сотруднике, другая таблица содержит изображение сотрудника. У меня было имя базы данных в качестве EmployeeData. У меня было две коллекции, названные как: сотрудник содержит информацию о сотруднике.и photo.files содержит изображение. (с помощью GridFS изображение сотрудника вставляется в БД)

В нижеследующем запросе оболочки Mongo выдается результат объединения

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, "creatDate": 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 кодis

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 голосов
/ 28 марта 2019

Вы можете использовать Mongo Java Driver с агрегацией lookup .Как то так:

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