Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / NoSQL, Big Data Новый топик    Ответить
 Выбрать сообщения из чата с заданным именем  [new]
guvatu
Member

Откуда:
Сообщений: 1
Всем доброго времени суток и я сразу прошу прощения за такой длинный листинг, но иначе боюсь что-то упустить.
Имеется у меня коллекция с документами такого вида:

{
  u'room_name': u'My first channel',
  u'users': [

  ],
  u'_id': ObjectId('53badcb68d9c3013c1594199'),
  u'messages': [
    {
      u'content': u'q joined',
      u'public_login': u'q',
      u'datetime': 1404758871,
      u'avatar': u'/static/img/user_dump.jpg',
      u'attach_list': [

      ]
    },
    {
      u'content': u'q joined',
      u'public_login': u'q',
      u'datetime': 1404758874,
      u'avatar': u'/static/img/user_dump.jpg',
      u'attach_list': [

      ]
    },
    {
      u'content': u'q joined',
      u'public_login': u'q',
      u'datetime': 1404758877,
      u'avatar': u'/static/img/user_dump.jpg',
      u'attach_list': [

      ]
    },
    {
      u'content': u'q joined',
      u'public_login': u'q',
      u'datetime': 1404758886,
      u'avatar': u'/static/img/user_dump.jpg',
      u'attach_list': [

      ]
    },
    {
      u'content': u'q joined',
      u'public_login': u'q',
      u'datetime': 1404758886,
      u'avatar': u'/static/img/user_dump.jpg',
      u'attach_list': [

      ]
    }
  ]
}

нужно выбрать сообщения из комнаты с именем 'My first channel', datetime которых больше 1404758874
сейчас дошел до варианта запроса
db.channels.find({'room_name': 'My first channel',
                    'messages.datetime': {'$gt': 1404758874}
                }, {'messages': 1, '_id': 0})


но, как я понимаю, эта штука выбирает все сообщения, если в комнате My first channel есть сообщения с datetime больше 1404758874. Подскажите, пожалуйста, как составить нужный мне запрос.
з.ы. символ u перед строками игнорируйте, это указатель в питоне на то что строка является юникодом и при выборке никакой роли не играет. (надеюсь :) )
8 июл 14, 02:10    [16272838]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать сообщения из чата с заданным именем  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28166
guvatu, а вот не надо было сообщения пихать во вложенный массив документа.
8 июл 14, 11:12    [16273775]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать сообщения из чата с заданным именем  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28166
$elemMatch (projection)

db.channels.find({ room_name: 'My first channel' }, { messages: { $elemMatch: { datetime: { $gt: 1404758874 } } } })

{
  "_id" : ObjectId("53badcb68d9c3013c1594199"),
  "messages" : [{
    "content" : "q joined",
    "public_login" : "q",
    "datetime" : 1404758877,
    "avatar" : "/static/img/user_dump.jpg",
    "attach_list" : [ ]
  }]
}
8 июл 14, 11:26    [16273877]     Ответить | Цитировать Сообщить модератору
Все форумы / NoSQL, Big Data Ответить