У меня возникли проблемы при написании запроса, в котором я хочу получить все документы, в которых нет ни одного вложенного документа, где его свойство IsCurrentRevision
имеет значение true. Другими словами, только получение документов, которые не имеют ни одной ревизии, помеченной как текущая.
То, что у меня пока есть:
{StartTimeUtc: {$gte: new ISODate('12/14/2019')},
EndTimeUtc: {$lte: new ISODate('01/21/2020')},
IsDeleted: false, 'MyDocument.IsCurrentRevision': false,
"MyDocument.1.IsCurrentRevision" : {$exists: false}}
Это куда-то меня заводит, но проблема в том, что мне нужно вручную запросить индекс. В этом случае приведенный выше запрос возвращает все документы только с 1 ревизией (то есть только с одним элементом в массиве вложенных документов), чья ревизия не помечена как текущая. Таким образом, если бы я хотел получить документы, которые имеют 2 ревизии, причем вторая также помечена как ложная, мне нужно было бы обновить запрос так:
{StartTimeUtc: {$gte: new ISODate('12/14/2019')},
EndTimeUtc: {$lte: new ISODate('01/21/2020')},
IsDeleted: false, 'MyDocument.1.IsCurrentRevision': false,
"MyDocument.2.IsCurrentRevision" : {$exists: false}}
Это очевидно утомительно, есть ли лучший способ ? Если это помогает, я использую Mon go Compass
Редактировать:
Вот как выглядит мой документ
{
_id: Guid,
TemplateId: guid,
StartTimeUtc: DateTime,
EndTimeUtc: DateTime
..
..
SoapNoteRevisions: Array {
_id: Guid,
IsCurrentRevision: boolean,
..
..
}
}
Я избавился от ненужных битов, как сам документ также содержит немало полей в ревизии (еще один подмассив)