Я использую метод aggregate в Mongodb для текстового поиска. Я пробовал по-разному с этим и до сих пор не могу найти правильный способ фильтрации моих результатов. Я настроил индекс, и он отлично работает только с текстовым поиском, а также отлично работает с запросом.Mongodb - как использовать агрегированный текстовый поиск с поиском запроса
Вот мой код, чтобы сделать поиск текста:
Model.aggregate([
{ $match: { $text: { $search: searchValue } } },
{ $project: { displayTitle: 1, title: 1, body: 1, _type: 1, _id: 1, score: { $meta: "textScore" } } },
{ $match: { score: { $gt: 1.0 } } }
], function (err, models) {
})
Однако я хочу, чтобы иметь возможность фильтровать модели далее по этому запросу:
Model.find({_parentIds: {$in: arrayOfIds}})
Я бы подумал, что это будет работать :
Model.aggregate([
{ $match: { $text: { $search: searchValue }, _parentIds: {$in: arrayOfIds} } },
{ $project: { displayTitle: 1, title: 1, body: 1, _type: 1, _id: 1, score: { $meta: "textScore" } } },
{ $match: { score: { $gt: 1.0 } } }
])
Но, к сожалению, это не так. Кто-нибудь пробовал это или я что-то упускаю?
Вот пример коллекции Я ищу через:
[{
displayTitle: "first item",
title: "first_item",
_type: "item",
_parentIds: ["123", "234"]
}, {
displayTitle: "second item",
title: "second_item",
_type: "item",
_parentIds: ["123", "234"]
}, {
displayTitle: "third item",
title: "third_item",
_type: "item",
_parentIds: ["345", "456"]
}]
Мой текущий поиск будет что-то вроде этого:
searchValue = "item"
arrayOfIds = ["345"];
и будет ждать этот документ только обратно:
{
displayTitle: "third item",
title: "third_item",
_type: "item",
_parentIds: ["345", "456"]
}
Спасибо!
Можете ли вы добавить образец документа и ожидаемый результат? – Veeram
@Veeram - Я добавил образец коллекции и ожидаемый результат – darylhedley