并非每个“新”功能都能立即将其放入抽象层,例如spring-mongo。
因此,您需要做的就是定义一个使用该接口的类,该类将采用直接指定的BSON对象作为其内容:AggregationOperation
public class CustomAggregationOperation implements AggregationOperation {
private DBObject operation;
public CustomAggregationOperation (DBObject operation) {
this.operation = operation;
}
@Override
public DBObject toDBObject(AggregationOperationContext context) {
return context.getMappedObject(operation);
}
}
然后,可以在聚合中使用,如下所示:
Aggregation aggregation = newAggregation(
match(
Criteria.where("username").is("user001")
),
new CustomAggregationOperation(
new BasicDBObject(
"$lookup",
new BasicDBObject("from", "NewFeedContent")
.append("localField","content.contentId")
.append("foreignField", "_id")
.append("as", "NewFeedContent")
)
)
)
其中显示了与内置管道帮助程序混合的自定义类。match()
在每个帮助程序下面发生的所有事情是它们序列化为BSON表示,例如无论如何。因此,这里的构造函数只是直接获取对象,并直接从 返回它,这是接口上的标准方法,在序列化 pipline 内容时将调用该方法。DBObject
.toDBObject()