Да, заголовок - полный рот, но это самый простой способ, которым я мог бы кратко описать проблему:
У меня есть документ, который выглядит примерно так:
{ "_id" : ObjectId("4e5044ecf9d7954533000002"), "events" : [
{
"state" : 1,
"time" : 1313882989,
},
{
"time" : 1313883005,
"state" : 0,
}
]}
Вы можете видеть, что«события» - это массив встроенных документов.состояние: 1 означает, что документ был установлен как «активный» в это время (секунды в UTC), а состояние: 0 означает, что он был установлен как «неактивный» в то время.По сути, это дает мне диапазон времени, когда этот документ был активен (от 1313882989 до 1313883005)
Теперь я пытаюсь определить, какие документы были активны в любой конкретный момент времени, например, в 1313883013, время, которое находится между активнымии неактивные события.
Я могу получить что-то с помощью этого запроса:
db.plays.find({events:{$elemMatch:{state:1,time:{$lte:1313883013}}}})
Соответствует полному встроенному документу, где состояние = 1 И время <1313883013.Однако этого недостаточно, потому что я должен убедиться, что документ <strong> также не содержит неактивное событие в 1313883013 или ранее, поэтому я попробовал это:
db.plays.find({events:{$elemMatch:{state:1,time:{$lte:1313883013}},$not:{$elemMatch:{state:0,time:{$lte:1313883013}}}}})
но безрезультатно.И я пробовал разные варианты этого тоже.
Надеюсь, я достаточно ясно дал понять, заранее спасибо за любую помощь !!