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 на убунту методом добавления ноды на убунте и удаления центос
yopp
Never
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
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
Never
db.user_action.find({createdDate: {$gte: today}})
Never
Never
today выше определи.
Nick
Never
Muzaffar
Never
Never
Muzaffar
джава, только я сейчас пишу простой запрос в консоле
Never
Never
Never
А так хз.
Artem
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
А так всё ок.
Never
У тебя же постов старше того, что lt нету?
Never
Там, посты в будущем?..
Never
посты = user_action
Never
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
Ты же строку вводил.
Never
Я этого не заметил:D
Muzaffar
скорее изза ИСОДейт ?
Never
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
Кавычки это строка.
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). Если иметь ввиду, что запросов будет в секунду немало и новые документы будут создаваться активно(я вот боюсь дубликатов).
Daniil
Daniil
Alexandr
Daniil
Можно и в монге такое сделать в рамках одного документа в отдельной коллекции (изменения в рамках одного документа атомарны), ещё есть вариант на редисе сделать тоже самое, особенно если он уже есть на проекте
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 должно быть уникальна в коллекции.
Приложение нагружённое, если делать проверку на стороне клиента - можем получить несколько победителей.
Alex
Muzaffar
Muzaffar
понял что лишняя строка...
Dev
Дмитрий
Коллеги, привет. Подскажите плз, что в агрегации не так? Через find коректно находит всё, а через агрегацию ничего не возвращает, так понимаю он не может айди почемуто схавать?
Anonymous
Anonymous
Но вообще если в документах есть поле по которому определяется победитель можно и через find + sort + limit всегда возвращать только 20 победителей без создания отдельной коллекции.
ILYA
Подскажите пожалуйста, как реализовать подстановку ответов на комментарии вместо id?
ILYA
Hunter
Всем привет, а как сохранять изображение и потом их норм доставать?
ILYA
Danil
Здравствуйте, а как под поля в документах можно сделать в pymongo?