Spring mongodb ArrayOperators按$in子句过滤

Spring mongodb ArrayOperators按$in子句过滤,spring,mongodb,filter,clause,Spring,Mongodb,Filter,Clause,我必须将这个mongodb聚合转换为spring聚合代码 { $addFields: { "versions" : { $filter: { input: "$versions", as: "version", cond: {$in: ["$$version.parentId", "$libraries._id"]} }} }} 我现在的代码是 AddFieldsOperation.with("versions", Ar

我必须将这个mongodb聚合转换为spring聚合代码

{ $addFields: {
    "versions" : { $filter: {
        input: "$versions",
        as: "version",
        cond: {$in: ["$$version.parentId", "$libraries._id"]}
    }}
}}
我现在的代码是

AddFieldsOperation.with("versions", 
    ArrayOperators.arrayOf("versions").filter().as("version").by(
        ArrayOperators.In.arrayOf("version.parentId").containsValue(
            ArrayOperators.arrayOf("libraries._id")
        )
    )
)
但这就产生了一个错误:

$in需要一个数组作为第二个参数,找到:objectId'

我想这是因为它不接受这个论点

ArrayOperators.arrayOf("libraries._id")

如果我们看一下的Spring文档,就会发现以下方法定义:

arrayOf public static ArrayOperators.ArrayOperatorFactory arrayOf(String fieldReference) Take the array referenced by given fieldReference. Parameters: fieldReference - must not be null. Returns: 请注意,它声明fieldReference应该引用数组。您可能想更改ArrayOperators.arrayOflibraries。\u id改为ArrayOperators.arrayOflibraries。

我有类似的查询

{
   coupons: {
      $filter: {
         input: "$coupons",
         as: "coupon",
         cond: { 
             $in: [ "$$coupon._id", ["ABC", "DEF"] ]
         }
      }
   }
}
下面的解决方案对我有效

filter("$coupons").as("coupon").by(ArrayOperators.In.arrayOf(couponIds).containsValue("$$coupon._id"))

注意:couponIds是带有值[ABC,DEF]

的列表,这不起作用,没有配置fieldReference,我无法更改。代码段{$in:[$$version.parentId,$libraries.\u id]}在mongo中工作,但没有正确转换为Spring您说没有配置fieldReference是什么意思?我不熟悉Spring,但fieldReference不是一个简单的字符串,它与文档中的某个数组字段相匹配吗?你试过上面的吗?我以为你指的是$ref,我没有。就像你说的,我有一个现场参考,但是这个片段不起作用。我想通过检查versions.parentId是否在库中来筛选versions数组。\u id