Roman
Добрый день! подскажите куда в доку глянуть чтобы запросить записи по этому полю?
Alex
Народ, а подскажите, будут ли просадки в производительности при выборе по стрингу, например, в сравнении с выборкой по ID?
Andrew
?
Roman
а так можно?
Andrew
Нужно
Andrew
Dot notation
Andrew
Может больше уровней вложенности
Roman
а если например не будет этого поля?
Roman
он не найдет или выдаст ошибку?
Andrew
То ничего не выдаст, совпадегия по паре ключ значение нет
Andrew
Можно использовать exists для проверки условтя
Roman
спс
Roman
щас попробую
yopp
журнал это Write-Ahead-Log. Туда пишется операция до того как она применится к хранилищу
yopp
Если монга не может перезапустится, вероятно в этом проблема с журналом. права или что-то ещё
ᅠ ᅠ ᅠ ᅠ
в этот момент в логах монги что?
читаю в док-е, как достать логи из облачного кластера, пишут, что "M0 Free Tier and M2/M5 shared clusters do not provide downloadable logs." https://docs.atlas.mongodb.com/reference/free-shared-limitations/#atlas-free-tier
Petro
Вопрос, как просто можно проверить поле на уникальность в 2х collections. К примеру есть collection A({_id, name, type}), и B({_id, name, date}). Нужно сделать уникальным поле name в 2х collections сразу. т.е. если в collection A в документе используеться name=“Vasya”. То в collection B запись с name = “Vasya” я не могу.
Nick
не забывайте что за время пока вы делаете выборку и вставку ктото другйо сможет вставить туда запись
Nick
стандартный race condition
AstraSerg
не забывайте что за время пока вы делаете выборку и вставку ктото другйо сможет вставить туда запись
Да, есть такая вероятность. Но если интенсивность записи не большая, то можно пренебречь. Наверно... :) Но вообще в 4.0 появились транзакции, более надёжно получится
Nick
кстати а что будет в результате, если в одной транзакции даные прочитались, а в другой они пишутся и коммитятся
Anonymous
Господа. Столкнулся с трудностями как продумать эффективную систему лайков для постов-твитов. Использую NodeJS/Mongoose. Первое что приходит в голову выглядит очень неэффективно, куча ненужных вычислений. Поскольку надо не просто счетчик лайков, а и показывать конкретному человеку лайкнул он этот твит или нет. 1. В модель Tweet сделать поле Likes, куда засовывать ObjectID всех лайкнувших. 2. Таким образом мы довольно эффективно можем считать количество лайков (просто кол-во записей) 3. Но когда вопрос стоит чтобы показать конкретному человеку ставил он лайк или нет, нам придется отправлять на клиент список всех лайкнувших и там находить совпадение с айдишником человека. Это выглядит глупо - зачем мне отправлять на клиент массив с 10000 записей лайков, только чтобы там найти совпдаение? 4. А делать отдельный эндпоинт только для статуса лайка где вычислять эти значения отдельно выглядить слишком жирно (подобного функционала будет много, и будет слишком путаница) Как решают такую задачу?
Vova
Господа. Столкнулся с трудностями как продумать эффективную систему лайков для постов-твитов. Использую NodeJS/Mongoose. Первое что приходит в голову выглядит очень неэффективно, куча ненужных вычислений. Поскольку надо не просто счетчик лайков, а и показывать конкретному человеку лайкнул он этот твит или нет. 1. В модель Tweet сделать поле Likes, куда засовывать ObjectID всех лайкнувших. 2. Таким образом мы довольно эффективно можем считать количество лайков (просто кол-во записей) 3. Но когда вопрос стоит чтобы показать конкретному человеку ставил он лайк или нет, нам придется отправлять на клиент список всех лайкнувших и там находить совпадение с айдишником человека. Это выглядит глупо - зачем мне отправлять на клиент массив с 10000 записей лайков, только чтобы там найти совпдаение? 4. А делать отдельный эндпоинт только для статуса лайка где вычислять эти значения отдельно выглядить слишком жирно (подобного функционала будет много, и будет слишком путаница) Как решают такую задачу?
Зачем получать весь список если можно средствами монго операторов выполнить "поиск"?
Vova
db.tweets.find({ _id: "tweet id" }, { likes: { $elemMatch: { $in: ["user id"] } }}) это первое что в голову пришло
Vova
Хотя неправильно, щас перепишу
Anonymous
Mongoose
Vova
Я не знаю монгус, сам перепиши, в гугле примеры найдёшь
Anonymous
вопрос не только в том как эффективно из бд доставать, а и в каком видео отправлять, желательн ов одном запросе
Anonymous
т.е. это все чтоб прилетало когда человек открывает ленту с твитами
Anonymous
я же не буду запрашивать отдельно по каждому твиту
Vova
т.е. это все чтоб прилетало когда человек открывает ленту с твитами
всё это что? список всех твитов в ленте + поле, по которому можно понять, лайкнул ли текущий пользователь этот твит?
Anonymous
сейчас вот так прилетает информация в ленту твитов. желательно это все в одном запросе делать [ { "content": { "text": "Tweet one" }, "_id": "5baf5003700c101913212d4e", "author": "5baf4fec700c101913212d4d", "createdAt": "2018-09-29T10:12:19.825Z", "__v": 0 }, { "content": { "text": "Tweet two" }, "_id": "5baf5003700c101913212d4a", "author": "5baf4fec700c101913212d4d", "createdAt": "2018-09-29T10:12:19.825Z", "__v": 0 } ]
Vova
Я так понял что да Мой пример выше вернёт следующие данные При условии что модель tweet такая: { "_id": "tweet id", "likes": ["user id 1", "user id 2"] } Результат будет массив твитов { _id: "tweet id" } если в лайках не найден пользователь; { _id: "tweet id", tweets: ["user id"] } если найден id
Vova
так а где у тебя массив likes?
Anonymous
его еще нету
Anonymous
думаю как сделат
Anonymous
@second_VL я понял твой вариант. попробую разобратся как такой поиск в монгузе делать
Anonymous
правда еще ж надо кол-во лайков
Anonymous
отдельно каунтер делать лайков? или считать по количеству айдишников?
Vova
[ { "content": { "text": "Tweet one" }, "likes": ["userid1", "userid2"], "likesCount": 2, "_id": "5baf5003700c101913212d4e", "author": "5baf4fec700c101913212d4d", "createdAt": "2018-09-29T10:12:19.825Z", "__v": 0 }, { "content": { "text": "Tweet two" }, "likes": ["userid1", "userid3"], "likesCount": 2, "_id": "5baf5003700c101913212d4a", "author": "5baf4fec700c101913212d4d", "createdAt": "2018-09-29T10:12:19.825Z", "__v": 0 } ] db.tweets.find({ }, { likes: { $elemMatch: { $in: ["userid3"] } } }) Результат: [ { "content": { "text": "Tweet one" }, "likesCount": 2, "_id": "5baf5003700c101913212d4e", "author": "5baf4fec700c101913212d4d", "createdAt": "2018-09-29T10:12:19.825Z", "__v": 0 }, { "content": { "text": "Tweet two" }, "likes": ["userid3"], "likesCount": 2, "_id": "5baf5003700c101913212d4a", "author": "5baf4fec700c101913212d4d", "createdAt": "2018-09-29T10:12:19.825Z", "__v": 0 } ]
Vova
Как-то так
Vova
Это называется projection
Anonymous
спасибо большое, дали несколько идей. также в голову пришло, что я могу (и надо!) хранить список всех постов которые лайкнул пользователь в схеме самого пользователя. возможно это еще поможет.
Vova
А при добавлении лайка например можно делать так db.tweets.update({ _id: "tweet id" }, { $push: { likes: "user id 4" }, $inc: { likesCount: 1 } })
Anonymous
👍спасибо, буду делать
yopp
Хранить лайки в том-же документе очень плохая идея
yopp
https://docs.mongodb.com/ecosystem/use-cases/storing-comments/
Nick
Господа. Столкнулся с трудностями как продумать эффективную систему лайков для постов-твитов. Использую NodeJS/Mongoose. Первое что приходит в голову выглядит очень неэффективно, куча ненужных вычислений. Поскольку надо не просто счетчик лайков, а и показывать конкретному человеку лайкнул он этот твит или нет. 1. В модель Tweet сделать поле Likes, куда засовывать ObjectID всех лайкнувших. 2. Таким образом мы довольно эффективно можем считать количество лайков (просто кол-во записей) 3. Но когда вопрос стоит чтобы показать конкретному человеку ставил он лайк или нет, нам придется отправлять на клиент список всех лайкнувших и там находить совпадение с айдишником человека. Это выглядит глупо - зачем мне отправлять на клиент массив с 10000 записей лайков, только чтобы там найти совпдаение? 4. А делать отдельный эндпоинт только для статуса лайка где вычислять эти значения отдельно выглядить слишком жирно (подобного функционала будет много, и будет слишком путаница) Как решают такую задачу?
А можете сказать это реальный проект или поиграться с монгой?
Anonymous
День добрый, основу замутили, зашел с твинка. Такой вопрос: что ставить в $unset чтобы оно неругалось? P.S скриншот нема сделать, твинк только с телефона работает а пересылать туда сюда пикчи ленивенько
Anonymous
Anonymous
Vova
year и season это числовые поля?
Anonymous
Ну вообще строки
Vova
year: "", season: "" попробуй
Anonymous
Неа, тоже самое выходит
Anonymous
Странно конечно
Vova
А какой полный текст ошибки?
Anonymous
Вот же он
Anonymous
Монга думает что $unset пустой почему-то
Vova
покажи полный запрос, я так понял что верхний и нижний скрины не связаны
Anonymous
Anonymous
Вот
Anonymous
Таки запарился со скрином
Vova
year без кавычек
Vova
И второй тоже
Anonymous
Та дело не в них, уже убрал все равно
Anonymous
Таже ошибка
Anonymous
Хех
Anonymous
Понял в чем была ошибка, вопрос решен
Vova
Anonymous
Хранить лайки в том-же документе очень плохая идея
вы предлагаете их отдельно хранить? зачем?
Anonymous
А можете сказать это реальный проект или поиграться с монгой?
в зависимости от ответа на этот вопрос зависит ответ?
Nick
тут сугубо личный интерес понять какого рода реальные задачи люди пытаются решить на монго, а не просто из академического интереса чтото там придумали и пытаются поиграться
Anonymous
а в двух словах никак?