powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Выбрать сообщения из чата с заданным именем
3 сообщений из 3, страница 1 из 1
Выбрать сообщения из чата с заданным именем
    #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
Выбрать сообщения из чата с заданным именем
    #38690155
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guvatu, а вот не надо было сообщения пихать во вложенный массив документа.
...
Рейтинг: 0 / 0
Выбрать сообщения из чата с заданным именем
    #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
3 сообщений из 3, страница 1 из 1
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Выбрать сообщения из чата с заданным именем
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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