Never
https://stackoverflow.com/questions/6502541/mongodb-query-multiple-collections-at-once
Never
А похоже, что я просто тупой:D
Muzaffar
Здравствуйте, всех с наступившим! ребят можете подсказать как вывести все записи за сегодня как я понимаю ISODate вернет как дату так и время...
Muzaffar
вот так правильно? db.user_action.find({ $where: function () { var today = new Date(); today.setHours(0, 0, 0, 0); return this.createdDate >= today } })
Oleg
кто-то держал replicaset на нодах с разными дистрибутивами? хочу переехать с centos 7 на убунту методом добавления ноды на убунте и удаления центос
Never
db.collection('pviews').aggregate([ {$match: {user_id: req.session.used_id}}, {$lookup: {from: 'posts', localField: 'post_id', foreignField: '_id', as: 'posts'}} ]) pviews имеет поля user_id и post_id, то хранит какой юзер какой пост посмотрел. Мне нужно достать посты, которые юзер не посмотрел. Данный же запрос возвращает те, которые он посмотрел. Никто не поможет?
Muzaffar
По идеи всё ок.
в том то и дело что не проходит, решил использовать временной интервал... но с кода вызывать тоже не получается
Never
Это тогда тебе нужно получить время начала дня, что ты и сделал, либо отнять 24 часа.
Never
Ну и искать посты, где дата больше или равна этой дате.
Never
Логически всё ок.
Muzaffar
получаю вот это: Query failed with error code 139 and error message 'SyntaxError: unexpected token: keyword 'function'' on server 172.16.30.250:27022
Never
db.user_action.find({createdDate: {$gte: today}})
Never
today выше определи.
Never
нет
А на чём?
Muzaffar
джава, только я сейчас пишу простой запрос в консоле
Never
db.user_action.find({createdDate: {$gte: today}})
Вот это было бы валидно для ноды.
Never
А так хз.
Never
Поэтому у меня ступор, что делать.
Muzaffar
ранее работал только с sql базами... ну выше кидал же
Muzaffar
ну ладно как я понимаю вот это не корректный запрос так? db.user_action.find({ "createdDate" : { "$gte" : "2022-01-04T16:38:05Z", "$lt" : "2022-01-05T16:38:05Z"}}).count()
Never
А так всё ок.
Never
У тебя же постов старше того, что lt нету?
Never
Там, посты в будущем?..
Never
посты = user_action
Muzaffar
&lt убери.
дело в том что всегда возвращает 0
Never
дело в том что всегда возвращает 0
А у тебя есть подходящие записи?
Muzaffar
db.user_action.find({ "createdDate" : { "$gte" : "2022-01-04T16:38:05Z", "$lt" : "2022-01-05T16:38:05Z" } }).count() результат: 0 db.user_action.find({ createdDate: { $gte: ISODate("2022-01-04T16:38:05Z"), $lt: ISODate("2022-01-05T16:38:05Z") } }).count(); результат: 162471
Never
Ну да..
Never
Ты же строку вводил.
Never
Я этого не заметил:D
Muzaffar
скорее изза ИСОДейт ?
Never
Типо тебе нужно дату вводить, а не строку.
Never
И тогда всё ок.
Muzaffar
и только? а то что крейтДейт в кавичках и т.д. не имеет значения?
Muzaffar
хм java почему то формирует вот такой запрос Query: { "createdDate" : { "$gte" : "ISODate(2022-01-04T18:51:00Z)", "$lt" : "ISODate(2022-01-05T18:51:00Z)"}}, Fields: {}, Sort: {}
Never
Кавычки это строка.
Never
:D
Nick
db.collection('pviews').aggregate([ {$match: {user_id: req.session.used_id}}, {$lookup: {from: 'posts', localField: 'post_id', foreignField: '_id', as: 'posts'}} ]) pviews имеет поля user_id и post_id, то хранит какой юзер какой пост посмотрел. Мне нужно достать посты, которые юзер не посмотрел. Данный же запрос возвращает те, которые он посмотрел. Никто не поможет?
для истории: db.getCollection('t_views').explain().aggregate([ {$match: { user_id: 1}}, {$group: { _id: null, viewed_posts: {$addToSet: "$post_id" } }} , {$lookup: { from: "t_posts", let: { viewed_postss: "$viewed_posts" }, pipeline: [ {$match: {$expr: {$not: {$in: ["$_id", "$$viewed_postss"]}}}} ], as: "not_viewed" }} ]) пример содержимого t_posts: { "_id" : 1, "text" : "t1" } пример содержимого t_views: { "_id" : ObjectId("61d5a5f10a3a894b4ca5035f"), "post_id" : 1, "user_id" : 1 }
Alexandr
Я сделал пагинацию через Range Queries и все работает(возвращается JSON с данными и ID документа для следующей/предыдущей страницы). Это работает, но теперь нужно добавить счетчик страниц на кнопки на фронте для пагинации, типа(1234...last). Не могу как это лучше сделать. Может кто-то мне сможет объяснить или показать пример? Спасибо.
Alexandr
Еще другой вопрос: какой самый верный способ добавлять номер документу при его создании? типа индекс(номер+1). Если иметь ввиду, что запросов будет в секунду немало и новые документы будут создаваться активно(я вот боюсь дубликатов).
Alexandr
Кол-во документов в коллекции известно, кол-во документов на странице тоже известно, рассчитать кол-во страниц очень просто — поделить одно на другое
Я могу рассчитать количество страниц, верно. Но как найти в какой из них находится документ? Документ мы находим по objectID.
Daniil
Можно и в монге такое сделать в рамках одного документа в отдельной коллекции (изменения в рамках одного документа атомарны), ещё есть вариант на редисе сделать тоже самое, особенно если он уже есть на проекте
Muzaffar
ребят правильный ли запрос? надо найти количество уникальных документов за сегодня: db.user_action.aggregate([ { $match: { createdDate: {$gte: ISODate("2022-01-06T00:00:00Z")} } }, { $group: { _id: "$userId", total: {$sum: 1} } }, { $count: "count" } ]);
Ilya
а зачем total считать?
Dev
Подскажите, как эффективно реализовать unique together правило в MongoDB? Есть коллекции: - User - Game - Winners (поля: user, game). Пара user-game должно быть уникальна в коллекции. Приложение нагружённое, если делать проверку на стороне клиента - можем получить несколько победителей.
Muzaffar
а зачем total считать?
а как должно быть?
Muzaffar
понял что лишняя строка...
Dev
скорее всего вы ищете это https://docs.mongodb.com/manual/core/index-unique/#unique-compound-index
Подскажите, можно ли на уровне MongoDB ограничить количество возможных записей, к примеру, до 20? То есть чтобы в нашей коллекции Winners было не больше 20 победителей для любой из игр
Дмитрий
Коллеги, привет. Подскажите плз, что в агрегации не так? Через find коректно находит всё, а через агрегацию ничего не возвращает, так понимаю он не может айди почемуто схавать?
Anonymous
Но вообще если в документах есть поле по которому определяется победитель можно и через find + sort + limit всегда возвращать только 20 победителей без создания отдельной коллекции.
ILYA
Подскажите пожалуйста, как реализовать подстановку ответов на комментарии вместо id?
ILYA
Hunter
Всем привет, а как сохранять изображение и потом их норм доставать?
Simon
Всем привет, а как сохранять изображение и потом их норм доставать?
либо на диск, а в бд путь до файла. Либо есть специальные бд, где можно хранить файлы и они очень быстро с этим работают
ILYA
Подскажите пожалуйста, как реализовать подстановку ответов на комментарии вместо id?
Люди, такое вообще реально реализовать? чтобы сформировать один документ из 4х
Danil
Здравствуйте, а как под поля в документах можно сделать в pymongo?
Danil
Здравствуйте, а как под поля в документах можно сделать в pymongo?
Вот обычно вставляю p = { '_id': ..., 'name': ..., works: } И на месте works ещё типо под поле work1, work2 и тд, это можно сделать как-то?
Astik
https://docs.mongodb.com/manual/core/capped-collections/ Через параметр max.
Подскажите пожалуйста, как извлечь данные mongo с сервера через командную строку ?