gpt4 book ai didi

java - Mongo 3.2 驱动程序的新聚合功能,使用 Java

转载 作者:可可西里 更新时间:2023-11-01 10:03:11 25 4
gpt4 key购买 nike

我想按照这里的说明在 Mongo 3.2 中执行聚合,但在 Java 中:

https://docs.mongodb.org/master/reference/operator/aggregation/lookup/#pipe._S_lookup

目前我在 java 中的查询对象非常简单:

    Document query = new Document();

query.append("employeId", employeId);

除了按 employeeId 过滤外,我还想加入这个带有公司的集合(其中 employee.company_id = company.id)

我如何在 Java 中做到这一点?看来我找不到这个新的 Mongo 功能的文档。

编辑

员工集合示例:

{
"id" : 1,
"name" : "John",
"lastName" : "Moore",
"age" : 44,
"companyId": 10
}

公司集合示例:

{
"id" : 10,
"companyName" : "Microsoft",
"numEmployee" : 100
}

预期输出示例

{
"id" : 1,
"name" : "John",
"lastName" : "Moore",
"companyId" : 10,
"companyName" : "Microsoft"
}

最佳答案

运行以下聚合管道应该会为您提供所需的结果

pipeline = [
{
"$match": {
"_id": employeeId
}
},
{
"$lookup": {
"from": "company",
"localField": "companyId",
"foreignField": "_id",
"as": "company"
}
},
{
"$project": {
"name": 1,
"lastName": 1,
"companyId": 1,
"companyName": "$company.companyName"
}
}
];
db.employee.aggregate(pipeline);

Java 测试实现

public class JavaAggregation {
public static void main(String args[]) throws UnknownHostException {

MongoClient mongo = new MongoClient();
DB db = mongo.getDB("test");

DBCollection coll = db.getCollection("employee");

// create the pipeline operations, first with the $match
DBObject match = new BasicDBObject("$match",
new BasicDBObject("_id", employeeId)
);

// build the $lookup operations
DBObject lookupFields = new BasicDBObject("from", "company");
lookupFields.put("localField", "companyId");
lookupFields.put("foreignField", "_id");
lookupFields.put("as", "company");
DBObject lookup = new BasicDBObject("$lookup", lookupFields);

// build the $project operations
DBObject projectFields = new BasicDBObject("name", 1);
projectFields.put("lastName", 1);
projectFields.put("companyId", 1);
projectFields.put("companyName", "$company.companyName");
DBObject project = new BasicDBObject("$project", projectFields);

List<DBObject> pipeline = Arrays.asList(match, lookup, project);

AggregationOutput output = coll.aggregate(pipeline);

for (DBObject result : output.results()) {
System.out.println(result);
}
}
}

关于java - Mongo 3.2 驱动程序的新聚合功能,使用 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36352110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com