【发布时间】:2019-09-09 03:27:56
【问题描述】:
我们的聚合管道的中间输出如下:
{ "_id" : { "$oid" : "..." }, "requestId" : "REQ4", "scrips" : ["3553", "5647", "1234", "0007"], "matched" : [{ "settlement" : "9001" }, { "settlement" : "9002" }], "settled" : [{ "settlement" : "9001" }, { "settlement" : "9003" }] }
{ "_id" : { "$oid" : "..." }, "requestId" : "REQ5", "scrips" : ["3554", "3456"], "matched" : [{ "settlement" : "9003" }], "settled" : [{ "settlement" : "9001" }, { "settlement" : "9003" }] }
请求是打印/返回请求(和脚本),其中matched 是settled 的精确子集。
预期输出:
{ "requestId" : "REQ5", "scrips" : ["3554", "3456"] }
下面的代码似乎可以实现——有没有更高效简洁的方式来实现呢?
filters.add(Aggregates.project(
Projections.fields(
Projections.include("requestId","scrips"),
Projections.computed("unmatched",
Document.parse("{ $setDifference:
['$matched','$settled'] }")))));
filters.add(Aggregates.match(Document.parse("{unmatched:{$eq:[]}}")));
filters.add(Aggregates.project(
Projections.fields(
Projections.excludeId(),
Projections.include("requestId","scrips"))));
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework mongodb-java