Как найти документ во временном диапазоне записанного встроенного документа? - PullRequest
0 голосов
/ 25 августа 2011

У меня есть документ, который выглядит примерно так:

{ "_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}}}}})

но безрезультатно. И я пробовал разные варианты этого.

Надеюсь, я достаточно ясно это объяснил, заранее спасибо за любую помощь !!

1 Ответ

0 голосов
/ 14 декабря 2011

Только не включайте в свой запрос state: 1.

Из полученного результата проверьте значение состояния (0 или 1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...