powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Помогите составить запрос для Mongo
14 сообщений из 14, страница 1 из 1
Помогите составить запрос для Mongo
    #39546701
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть коллекция Groups, содержащая набор полей: groupName, ownerDomainId, ..., allowedChannels[].
allowedChannels это массив id из другой коллекции Channels.
Список нужных мне элементов коллекции я получаю так:
Код: javascript
1.
2.
3.
4.
5.
function LUUID(uuid) {
    var hex = uuid.replace(/[{}-]/g, "");
    return new UUID(hex);
}
db.getCollection('Groups').find({ownerDomainId:LUUID("0f8af6de-2411-c147-825b-613344769438")})

Этот запрос возвращает коллекцию с нужными элементами.
Но я хотел бы ее получить в формате: groupName, channelNames (где channelNames — это строка, в которой через запятую перечислены channelName из коллекции Channels с соответствующими id).
Для реляционной БД это был бы SQL-запрос типа
Код: sql
1.
select Groups.groupName, Channels.channelName from Groups join Channels where Groups.allowedChannels = Channels.id
...
Рейтинг: 0 / 0
Помогите составить запрос для Mongo
    #39546705
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функцию $lookup я нагуглил, но она работает с версии 3.2, а у меня 2.6.4.
...
Рейтинг: 0 / 0
Помогите составить запрос для Mongo
    #39547033
master_yoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На клиенте делать lookup или в Groups хранить channelName вместо id
...
Рейтинг: 0 / 0
Помогите составить запрос для Mongo
    #39547122
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

это у Вас что за клиент, node.js?
...
Рейтинг: 0 / 0
Помогите составить запрос для Mongo
    #39547144
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, я делаю запрос из Robomongo, мне нужно просто получить список в виде текста. Далее я с ним буду работать руками.
...
Рейтинг: 0 / 0
Помогите составить запрос для Mongo
    #39547147
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

а в чём проблема обновиться до версии 3.2?
...
Рейтинг: 0 / 0
Помогите составить запрос для Mongo
    #39547152
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

а вообще можете написать функцию и использовать её к примеру в mapReduce.

Посмотрите сл. статью: Store a JavaScript Function on the Server
...
Рейтинг: 0 / 0
Помогите составить запрос для Mongo
    #39547161
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БД используется в другой системе и я не знаю, как эта другая система отнесется к обновлению БД.
Мне из этой БД нужно сделать разовую выборку данных, с которыми я буду работать уже вручную.
...
Рейтинг: 0 / 0
Помогите составить запрос для Mongo
    #39547197
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

тогда тупо в консоли пару циклов написать и все дела
...
Рейтинг: 0 / 0
Помогите составить запрос для Mongo
    #39547203
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я немного далек от JS.
Я видел пример использования mapReduce как раз для такой задачи (подстановка значений по коду, например тут ), но насколько я понял, это изменяет исходные данные в коллекции. А я как раз не хочу менять исходные данные.
Можно ли такую подстановку осуществить только в Robomongo, не затрагивая исходных данных?
...
Рейтинг: 0 / 0
Помогите составить запрос для Mongo
    #39547325
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

не нужен Вам mapReduce, тупо цикл for напишите в консоли.
...
Рейтинг: 0 / 0
Помогите составить запрос для Mongo
    #39547360
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, понял.
Сделал так:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function LUUID(uuid) {
    var hex = uuid.replace(/[{}-]/g, ""); // removes extra characters
    return new UUID(hex); //creates new UUID
}
db.getCollection('Groups').find({groupName:/^101-/, ownerDomainId:LUUID("0f8af6de-2411-c147-825b-613344769438")}, {groupName:1, allowedChannels:1}).forEach(
function(row) {
    print("Item " + row.groupName);
    db.getCollection('Channels').find({_id: {$in: row.allowedChannels}}).sort({channelName:1}).forEach(function(ch) {
        print("  channel " + ch.channelName);
    })
})


Склеить массив в общую строку сходу не получилось, пойдет и так.
...
Рейтинг: 0 / 0
Помогите составить запрос для Mongo
    #39547477
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

а зачем Вы getCollection дёргаете, когда можно просто db.Groups.find , или db['Groups'].find ?
...
Рейтинг: 0 / 0
Помогите составить запрос для Mongo
    #39547483
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так сам Robomongo предлагает, когда я открываю коллекцию.
Я не стал с ним спорить.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Помогите составить запрос для Mongo
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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