`Filters.eq(fieldName, value)` фактически не создает `$eq`, что приводит к проблемамJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 `Filters.eq(fieldName, value)` фактически не создает `$eq`, что приводит к проблемам

Сообщение Anonymous »

Я не уверен, является ли это проблемой MongoDB, проблемой с драйвером mongo-java или я делаю что-то неправильное.
Проблема в том, что MongoDB может вести себя по-разному в случае наличия оператора $eq или синтаксиса {fieldName: value. См. пример здесь: https://mongoplayground.net/p/sXKR2FvE5eg
Я хочу группировать по полю groupBy и хочу, чтобы объекты типа "A" находились в поле typeA и наоборот для B.
Я использовал драйвер mongo-java, который не создает оператор $eq в случае Filter.eq используется, см. документацию.
Для typeA я использовал $eq в примере, а для typeB я использовал синтаксис, отличный от $eq. Как показывает пример, оператор $eq на самом деле фильтрует правильно, а синтаксис, отличный от $eq, нет.
Итак, вопрос в том, является ли это фактической проблемой MongoDB или Filters.eq всегда должен создавать $eq в драйвере mongo-java?

Минимальный пример:
Следующий код:

Код: Выделить всё

var typeAPush = Accumulators.push("typeA", new Document("$cond", Arrays.asList(
new Document("$eq", Arrays.asList("$type", "A")),
"$$ROOT",
"$$REMOVE"
)));
var typeBPush = Accumulators.push("typeB", new Document("$cond", Arrays.asList(
// Using Filter.eq which does not create `$eq`
Filters.eq("$type", "B"),
"$$ROOT",
"$$REMOVE"
)));
var groupStage = Aggregates.group("$groupBy",
typeAPush,
typeBPush
);
создаст следующий Bson:

Код: Выделить всё

{
"$group": {
"_id": "$groupBy",
"typeA": {
"$push": {
"$cond": [
{
"$eq": [
"$type",
"A"
]
},
"$$ROOT",
"$$REMOVE"
]
}
},
"typeB": {
"$push": {
"$cond": [
{
"$type": "B"
},
"$$ROOT",
"$$REMOVE"
]
}
}
}
}
Обратите внимание на разницу в $cond между типами A и typeB. В случае typeB условие всегда будет истинным.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ses-issues
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»