#mongodb #mongodb-query
#mongodb #mongodb-запрос
Вопрос:
Допустим, у меня есть mongo $ или запрос, что-то вроде { $or: [query1, query2, ... queryN] }
, где каждый встроенный запрос может быть сложным. После выполнения запроса возвращается набор документов, соответствующий одному или нескольким встроенным запросам. Я хотел бы знать, какой из N встроенных запросов был удовлетворен для каждого документа в возвращенном наборе, возможно, путем добавления нового поля, которое я указываю, например. marks
, в каждый возвращенный документ, который будет содержать список индексов того, какой из запросов был удовлетворен. Мне нужна эта информация, чтобы указать, как каждый документ был идентифицирован в интерфейсе моего приложения.
Я понимаю, что мог бы проверить набор после его возврата и определить запросы, которые были удовлетворены, но эти запросы могут быть произвольно сложными и дорогостоящими для проверки — кроме того, это, должно быть, уже было сделано внутри самого mongo во время выполнения поиска.
Я также понимаю, что мог бы последовательно запускать каждый из N запросов, а затем отмечать и объединять результаты в растущий набор, но я хочу сэкономить эти накладные расходы, выполнив один запрос вместо N запросов.
И я понимаю, что Mongo, безусловно, остановится, как только будет найден первый удовлетворяющий запрос для каждого документа, поэтому я, возможно, не смогу получить полный набор, но тогда я хотел бы, по крайней мере, получить некоторую уверенность в том, что запросы выполняются в определенном порядке, скажем, 1 … N, и каждый документ может быть помечен его первым удовлетворяющим индексом.
Кто-нибудь знает, есть ли в Mongo механизм, который может это сделать?
Ответ №1:
Вы можете использовать агрегацию.
Используйте $addFields
для добавления нового поля для каждого запроса.
Вы могли бы либо $match
сначала, а затем добавить поля, либо сначала добавить поля и добавить добавленные поля.