Запрос документов по полям в массиве - PullRequest
0 голосов
/ 07 января 2012

В MongoDB у меня есть коллекция документов под названием «клиенты», где каждый документ структурирован примерно следующим образом.Обратите внимание, что TimeStamp - это DateTime:

{
  "Sessions": [
    {
      "SessionId": "pojiu5iprr2xw5ucsudyrkpv",
      "LocationId": {
        "$oid": "4de4590bfcee1a1b44165e2b"
      },
      "Timestamp": "Wed, 01 Jun 2011 09:39:26 GMT -04:00"
    }
  ],
  "_id": {
    "$oid": "4de6410efcee1a1204a3326c"
  }
}

Я бы хотел иметь возможность запрашивать «все клиенты, у которых есть хотя бы один сеанс с отметкой времени за последние 24 часа».Возможно ли это, не прибегая к полному сканированию M / R?Я также приму ответы со статически определенной датой, например, «все клиенты, у которых есть хотя бы один сеанс с отметкой времени позднее 1/5/2012»

1 Ответ

1 голос
/ 07 января 2012

Как насчет добавления поля в основной документ для "последнего времени сеанса".

Обновлено: Хорошо, вот как вы можете это сделать без добавления нового поля / индекса:

db.clients.find(
   { "Sessions" : 
      { $elemMatch : 
         { Timestamp : { $gt : new Date(new Date() - 86400000) } } 
      } 
   } 
);

один и тот же код в одной строке:

db.clients.find({ "Sessions" : { $elemMatch : { Timestamp : { $gt : new Date(new Date() - 86400000) } } } } );

86400000 - это количество миллисекунд в дне.

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