1. Главная
  2. Библиотека
  3. Базы данных
  4. А если я решу использовать это решение: оно будет испол...
Разбор задачи

А если я решу использовать это решение: оно будет использовать индекс: Это будет работать?

  • Предмет: Базы данных
  • Автор: Кэмп
  • #Индексация и оптимизация запросов
  • #NoSQL-системы
А если я решу использовать это решение: оно будет использовать индекс: Это будет работать?

Условие:

А если я решу использовать это решение:
```
db.out_puds_pps.aggregate([
{ $match: { "system_data.rcpt_pur_eb.rcpt_date": { $exists: true } } },
{ $addFields: { date_diff: { $subtract: ["$acc_doc_doc_date", "$system_data.rcpt_pur_eb.rcpt_date"] } } },
{ $match: { date_diff: { $ne: 0 } } }
]);
```
оно будет использовать индекс:
```
db.out_puds_pps.createIndex({
"system_data.rcpt_pur_eb.rcpt_date": 1
}, {
name: "out_puds_pps_system_data_rcpt_pur_eb_rcpt_date_cond_idx",
partialFilterExpression: {
$or: [
{ "acc_doc_doc_date": { $lt: "$system_data.rcpt_pur_eb.rcpt_date" } },
{ "acc_doc_doc_date": { $gt: "$system_data.rcpt_pur_eb.rcpt_date" } }
]
}
})
```
Это будет работать?

Решение:

Шаг 1. Индексы MongoDB создаются на основе значений полей документов и фильтрация с помощью partialFilterExpression ожидает константные условия для выбора документов, на которые будет распространяться индекс.

Шаг 2. В partialFilterExpression в данном примере пытаются сравнивать значение поля "acc_doc_doc_date" с другим полем "$system_...

Внутри — полный разбор, аргументация, алгоритм решения, частые ошибки и как отвечать на каверзные вопросы препода, если спросит

Попробуй решить по шагам

Попробуй один шаг и продолжи в режиме обучения или посмотри готовое решение

Почему `partialFilterExpression` в MongoDB не может использовать сравнения между полями документа, как в примере `{"acc_doc_doc_date": {"$lt": "$system_data.rcpt_pur_eb.rcpt_date"}}`?

Что нужно знать по теме:

Что нужно знать по теме

Алгоритм решения

Топ 3 ошибок

Что спросит препод

Не нашел нужную задачу?

Воспользуйся поиском

Выбери предмет