我必须基于对象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);
}
}
未产生任何结果可以帮助您。
答案 0 :(得分:0)
您可以将Mongo Java Driver与lookup聚合一起使用。 像这样:
collection.aggregate(
Arrays.asList(
Aggregates.match(Filters.eq("_id", "5c9c37df3aa2359d6b998e18")),
Aggregates.lookup("$photo.files", "_id", "_id", "test")
)
).forEach(printBlock);