【发布时间】: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