Как правильнее организовать хранение списка чего либо к примеру idшников?
В данном случае речь касается только NODEJS и MONGODB
Взять на примере таблицы User и поля friends и ,например через запятую id друзей добавлять 1,2,3,4 и.т.д ,а затем чтобы вывести скажем данные по каждому из их списком слать запросы в таблицу User конкретного пользователя, единственно что пришло в ум, есть ли более верные способы организации?
В данном контексте самый правильный вариант. User с полем friends, у которого тип list. Только не обязательно на каждого юзера слать отдельный запрос. Можно управится 2мя запросами (выбрать текущего пользователя, а затем выбрать всех юзеров с идами в списке user.friends). Ну или даже одним через аггрегирование.
ГЛЕБ ГЛЕБОВ: Не совсем понял что Вы просите. Но попробую догадаться. Я имел ввиду для 2хзапросного варианта такие запросы:
"SELECT friends FROM user WHERE id = 123;" => friends
"SELECT * FROM user WHERE id IN (#{friends})" => список друзей пользователя со всей информацией о них
Либо однозапросный вариант:
SELECT * FROM user WHERE id IN (SELECT friends FROM user WHERE id 123)
В мускульном виде выглядит не очень, но прекрасно ляжет на аггрегирование через map-reduce в монго.
kazmiruk: Класс! А можно последний вопрос, пожалуйста, все никак не могу нагуглить , вы говорили что есть тип Лист я такого в монгузе не нашел, зато нашел Эррэй, возможно массив тоже подойдет, только вот как делать при update concat , типа то что уже находиться в поле соединить с тем что я добавляю
ГЛЕБ ГЛЕБОВ: Да, array я и имел ввиду. Просто в питоне это называется списком, вот и привык. По поводу вопроса - примерно так:
db.user.insert({_id: ObjectId('123')}, {$addToSet: {friends: user_id1}})
или если сразу нескольких, то
db.user.insert({_id: ObjectId('123')}, {$addToSet: {friends: {$each: [user_id1, user_id2]}}})
Модификатор $addToSet добавляет элемент в массив только если такого элемента там еще нет. В случае с друзьями это ограничение как раз нужно. Если все таки не нужно, то просто $addToSet меняем на $push