Поскольку Mongo поддерживает только одно $text
поле на конвейер агрегации (внутри первого $match
этапа), это означает, что вы не можете выполнить логическое И, поскольку вы не можете $and
результаты нескольких $text
поисков.
// Fails due to "too many text expressions"
db.Employees.aggregate([
{$match: {$and: [
{$text: {$search: "senior"}},
{$text: {$search: "manager"}}
]}}
])
Поэтому мне нужно выполнить несколько отдельных поисков $text
, объединить результаты в моем коде NodeJS и передать этот набор результатов обратно в конвейер агрегации для дальнейшей обработки (например, $addFields
, $match
, $sort
).
Есть ли способ сделать что-то вроде...
let results1 = db.Employees.find({"$text":{"$search":"senior"}}, {"score":{"$meta":"textScore"}})
let results2 = db.Employees.find({"$text":{"$search":"manager"}}, {"score":{"$meta":"textScore"}})
let combinedResults = _.intersectionWith(results1, results2, _.isEqual)
let finalResults = /* pass combinedResults into aggregation pipeline and execute it */
Что-то вроде противоположности оператору $out, где я вместо этого я читал результирующий набор.
Я использую NestJS и Mongoose, если это поможет.
Senior manager
? - person Gibbs   schedule 14.08.2020senior
в каком-то поле иmanager
в каком-то поле. Они могут находиться в одном поле, но не обязательно. Лучшим примером может быть поиск, например, Джеймс И менеджер - person yev   schedule 14.08.2020