db.Camera_5.aggregate([
{
$group:{
_id: "any",
camera:{
$push: "$$ROOT"
}
}
},
{
$lookup:{
from:"Camera_6",
localField:"invalidField",
foreignField:"testField",
as:"camera6"
}
},
{
$lookup:{
from:"Camera_7",
localField:"invalidField",
foreignField:"testField",
as:"camera7"
}
},
{
$project:{
_id: 0,
allValue:{
$setUnion:["$camera","$camera6","$camera7"]
}
}
},
{
$unwind:{
path:"$allValue"
}
},
{
$project:{
_id: "$allValue._id",
CameraID:"$allValue.CameraID",
DeviceName:"$allValue.DeviceName"
}
},
{ $match :
{
$and : [
{
CameraID : { $in : [111, 222]}
}
]
}
}
])
GroupOperation groupOperation = group().
push("$$ROOT").as("camera");
final LookupOperation lookup = lookup("Camera_6", "invalidField", "testField", "camera6");
final LookupOperation lookup1 = lookup("Camera_7", "invalidField", "testField", "camera7");
final ProjectionOperation projectionOperation =
project().andExclude("_id").and("camera").unionArrays("$camera6","$camera7").as("allValue");
final UnwindOperation allValue = unwind("allValue");
final ProjectionOperation projectionOperation1 =project()
.andInclude("$allValue._id")
.andInclude("$allValue.CameraID");
final MatchOperation match = match(multiConditionJoin(cameraPageQuery));
Sort cameraSort = Sort.sort(Camera.class);
Aggregation aggregation = newAggregation(
groupOperation,
lookup,
lookup1,
projectionOperation,
allValue,
projectionOperation1,
match,
TypedAggregation.sort(cameraSort),
skip(0),
limit(2)
);
System.out.println(aggregation);
final AggregationResults<Camera> aggregate = mongoTemplate.aggregate(aggregation, "Camera_5", Camera.class);
final CountOperation total = count().as("total");
Aggregation aggregation2 = newAggregation(
groupOperation,
lookup,
lookup1,
projectionOperation,
allValue,
projectionOperation1,
total
);
System.out.println(aggregation2);
final AggregationResults<PageTotal> totalNum = mongoTemplate.aggregate(aggregation2, "Camera_5", PageTotal.class);
单纯记录,写的时候有一些小坑,或者谈不上坑,因为mongoTemplate用的少,难免有些小问题