【问题标题】:Setdifference giving incorrect resultsSetdifference 给出不正确的结果
【发布时间】:2019-09-03 09:59:48
【问题描述】:

我们正在尝试打印从不同集合中检索到的 2 个数组的差异,如下所示。但是,setdifference 似乎不起作用。
可能有什么问题?
预期输出:

{ "request" : [{ "requestId" : "REQ4" }], "unsent" : ["1234"] }

代码摘录和阶段输出如下:

AggregateIterable<Document> diff = 
                    scrips.aggregate(Arrays.asList(
                        Aggregates.group(null, Accumulators.addToSet("global", "$scrip"))
                    ,Aggregates.lookup("requests",new ArrayList<Bson>(Arrays.asList(new Document(
                            Document.parse("{\"$match\": { \"requestId\":'" + reqparam + "'}}")))),"request")

[此处输出:{ "_id" : null, "global" : ["3553", "5647", "0001"], "request" : [{ "_id" : { "$oid" : "5d6e37db1886a24e70b88b42 " }, "requestId" : "REQ4", "scrips" : ["3553", "5647", "1234"] }] }]

        ,Aggregates.project(
                    Projections.fields(
                    Projections.excludeId(),
                    Projections.computed("unsent", 
                            Document.parse("{ $setDifference: [\"$request.scrips\", \"$global\"] }"))
                )
            )

[此处输出:{“request”:[{“requestId”:“REQ4”}],“未发送”:[[“3553”,“5647”,“1234”]]}]

【问题讨论】:

  • 您能添加一个您正在处理的示例文档吗?

标签: mongodb mongodb-query aggregation-framework mongodb-java-3.3.0


【解决方案1】:

这里的问题是您尝试访问数组中的字段,同时使用未访问的 setDifference 并且只返回全局脚本,尝试在 setdifference 中添加 arrayelemat

 {
    $project: {
      unsent: {
        $setDifference: [
          {
            $arrayElemAt: [
              "$request.scrips",
              0
            ]
          },
          "$global"
        ]
      }
    }
  }

给出输出:

[
  {
    "_id": null,
    "scrips": [
      "1234"
    ]
  }
]

【讨论】:

    猜你喜欢
    • 2012-08-27
    • 2017-12-14
    • 2019-03-12
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2011-11-30
    相关资源
    最近更新 更多