Гость
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Выбрать сообщения из чата с заданным именем / 3 сообщений из 3, страница 1 из 1
08.07.2014, 02:10
    #38689943
guvatu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать сообщения из чата с заданным именем
Всем доброго времени суток и я сразу прошу прощения за такой длинный листинг, но иначе боюсь что-то упустить.
Имеется у меня коллекция с документами такого вида:

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
{
  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
сейчас дошел до варианта запроса
Код: powershell
1.
2.
3.
db.channels.find({'room_name': 'My first channel',
                    'messages.datetime': {'$gt': 1404758874}
                }, {'messages': 1, '_id': 0})



но, как я понимаю, эта штука выбирает все сообщения, если в комнате My first channel есть сообщения с datetime больше 1404758874. Подскажите, пожалуйста, как составить нужный мне запрос.
з.ы. символ u перед строками игнорируйте, это указатель в питоне на то что строка является юникодом и при выборке никакой роли не играет. (надеюсь :) )
...
Рейтинг: 0 / 0
08.07.2014, 11:12
    #38690155
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать сообщения из чата с заданным именем
guvatu, а вот не надо было сообщения пихать во вложенный массив документа.
...
Рейтинг: 0 / 0
08.07.2014, 11:26
    #38690172
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать сообщения из чата с заданным именем
$elemMatch (projection)

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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" : [ ]
  }]
}
...
Рейтинг: 0 / 0
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Выбрать сообщения из чата с заданным именем / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]