Как создать другое поле в документе mongoDB, которое фильтрует указанный элемент из существующего поля массива документоJAVA

Программисты JAVA общаются здесь
Anonymous
Как создать другое поле в документе mongoDB, которое фильтрует указанный элемент из существующего поля массива документо

Сообщение Anonymous »

Я пытаюсь отфильтровать элементы из поля массива документов mongoDB, которые не равны предоставленному значению, и создать новое поле с отфильтрованными элементами, используя агрегацию с помощью метода $filter, но он не фильтрует, а вместо этого показывает все элементы в поле массива документа.
Вот пример:
Я хочу запросить документы, в хобби которых есть «чтение», а затем создайте еще одно новое поле массива в документе, которое не включает «чтение» с использованием агрегации.
пример данных:
[
{
"_id": 1,
"name": "Alice",
"age": 30,
"hobbies": ["reading","traveling"]
},
{
"_id": 2,
"name": "Bob",
"age": 25,
"hobbies": ["gardening", "photography"]
},
{
"name": "James",
"age": 30,
"hobbies": ["reading", "painting"]
},
{
"_id": 3,
"name": "Charlie",
"age": 35,
"hobbies": ["swimming", "cycling"]
}
]

Ожидаемый результат:
[
{
"_id": 1,
"name": "Alice",
"age": 30,
"hobbies": ["reading", "painting"], // includes "reading"
"FilteredItems": ["painting"] // Does not include "reading"
},
{
"name": "James",
"age": 30,
"hobbies": ["reading", "painting"], // includes "reading"
"FilteredItems": ["painting"] // Does not include "reading"
}
]

Просто как в javascript Array.find((item) => item != нежелательно)
Я попробовал метод $filter:db.users.aggregate([
{
$match: {
hobbies: "reading"
}
},
{
$project: {
name: 1,
age: 1,
filteredItems: {
$filter: {
input: "$hobbies",
as: "hobby",
cond: { $eq: ["$hobby", "reading"] }
}
}
}
}
]);


Подробнее здесь: https://stackoverflow.com/questions/787 ... ified-item

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