Spring mongodb ArrayOperators фильтр по $ в предложении - PullRequest
0 голосов
/ 21 мая 2019

Мне нужно преобразовать этот агрегат mongodb в код агрегата пружин

{ $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")

1 Ответ

1 голос
/ 22 мая 2019

Если мы посмотрим на документацию Spring для ArrayOperators , мы найдем следующее определение метода:

arrayOf

public static ArrayOperators.ArrayOperatorFactory arrayOf(String fieldReference)

Take the array referenced by given fieldReference.

Parameters:
    fieldReference - must not be null.
Returns:

Обратите внимание, что в нем говорится, что fieldReference должен ссылаться на массив».Вполне вероятно, что вы хотите изменить ArrayOperators.arrayOf("libraries._id") на ArrayOperators.arrayOf("libraries").

...