Just
Такой кейс Есть документы с полем field и без этого поля Мне нужно получить все документы без этого поля Эффективнее будет sparse индекс или обычный в данном случае? Обычный индекс содержит в себе документы с этим полем, он не собирает документы, где это поле отсутствует? А в случае если поле, например, null, тогда он и эти документы индексирует? Sparse индекс содержит тоже документы только с этим полем Получается, разницы нет в моем кейсе?
Вячеслав
Доброе утро, господа. Подскажите, есть коллекция, где хранятся сведения об электронных письмах, если коротко: {_id: ObjectId('721839172398213'), sender: "mymail@mail.ru", subject: "test", recipients: ["test1@mail.ru", "test2@mail.ru", "test3@gmail.com"] }
Вячеслав
как мне найти все письма, где встречаются получатели с доменным именем, отличным от mail.ru ? оператор not {recipients: {$not: /mail.ru/}} не подходит, т.к. в данном примере mail.ru всё таки присутствует
Андрей
Всем привет! Подскажите плз, у меня две монговские базы. Если я содам документ в 1 базе такого вида: { _id: ObjectId('222') // Сгенерированный при создании базой name: 'offer', company: "id" // ObjectId Сгенерированный в другой коллекции базой } и потом через какое-то время отправлю его во вторую базу в таком виде { name: 'offer', company: "id" // ObjectId } может ли айдишник поля company, сгенерированный первой базой как-то получиться таким же у какой-нибудь записи во второй базе?
Назар
всем привет. У меня есть документы в коллекции, есть 2 поля isUnique и partNumber. Мне нужно, чтоб если уже есть в коллекции isUnique=true и partNumber=123123, то чтоб нельзя было добавить новый документ с таким partNumber. Можно это как то сделать?
Назар
нет
почему это нет?
Алексей
почему это нет?
а ты точно понял кому я ответил?
Назар
а ты точно понял кому я ответил?
да. Почему в 2х разных базах не может быть сгенерирован один и тот же objectid?
Алексей
да. Почему в 2х разных базах не может быть сгенерирован один и тот же objectid?
потому что он завязан и на время создания и на того кто создает, одна БД точно не создаст 2 одинаковых ид
yopp
там часть время, часть случайное число или счётчик
yopp
это по сути тоже самое что UUIDv4
Назар
да. Так в вопросе написано, что там 2 базы разные.
Назар
Я понимаю, что вероятно 1 на квинтилион. Что нужно в ту же милисекунду сделать запись, чтоб совпал счетчик и чтоб еще и случайное число совпало. Но все же
Алексей
в вопросе написано "через некоторое время"
Назар
через некоторое время один обьект отправят в другую базу. А в ней уже может быть такой же обьект. может ли айдишник поля company, сгенерированный первой базой как-то получиться таким же у какой-нибудь записи во второй базе?
Назар
может я конечно неправильно понял вопрос. Но мне показалось так. В любом случае вероятней землю черная дыра завтра засосет, но наверное совпасть objectid могут.
Вася
Всем привет! Кто подскажет как реализовать такую ситуацию? const livedMonthsWeight = { 1: 10, 3: 25, 6: 50, 12: 100, }; await Hoodrate.aggregate([ { $group: { _id: null, people: { $multiply: [ "$base.people", livedMonthsWeight["$livedMonths"], ], }, } ] вопрос в том как из внешней переменной объекта по ключу внутренней переменой агрегации, вытащить значение объекта?
Вася
перестроить с использованием $switch
ну получается ужасно, мне надо ручками переписывать все значения объекта в switch
Nick
ну получается ужасно, мне надо ручками переписывать все значения объекта в switch
ожидаемо) можно вынести это все в код и не тащить в сам запрос, а в запросе вытащить только данные для последующей дообработки
Andrii
Привет, использую Next.js 13 вместе с MongoDB. Как я могу в апи эндпоинтах реализовать получения объекта с массива containers по его айди + изменение его поля, ниже прикрепляю модель объекта на бд
Alena
Привет, использую Next.js 13 вместе с MongoDB. Как я могу в апи эндпоинтах реализовать получения объекта с массива containers по его айди + изменение его поля, ниже прикрепляю модель объекта на бд
```js // pages/api/containers/[containerId].js import dbConnect from '../../../utils/dbConnect'; import User from '../../../models/User'; export default async function handler(req, res) { const { query: { containerId }, method, } = req; await dbConnect(); switch (method) { case 'GET': try { // Предполагаем, что у нас уже есть _id пользователя в сессии или токене const userId = req.session.userId; // Или каким-то другим способом получаем ID пользователя // Находим пользователя и получаем контейнер с конкретным ID const user = await User.findById(userId).populate('containers'); const container = user.containers.find(c => c._id.toString() === containerId); if (!container) { return res.status(404).json({ message: 'Контейнер не найден' }); } res.status(200).json(container); } catch (error) { res.status(500).json({ message: error.message }); } break; // Другие методы (POST, PUT, DELETE и т.д.) // ... default: res.setHeader('Allow', ['GET', 'PUT']); res.status(405).end(`Метод ${method} не разрешен`); } } ```
Alena
чето как-то не получается код отформатить для телеги
Kvhqm
А насколько далеко ушёл монгус драйвер (и монго дб в целом) в плане обновления методов? Т.е. будет ли актуальной инфа с ютуба четырёх летней давности?
Anton
Всем привет
Anton
Как думаете, приложение по типу гугл формс (опросник) лучше на реляционной или документоориентированной базе данных делать?
Alex
Как вам удобнее будет. Я бы положил в Монгу, если все данные будут заполняться через форму и других не будет. Так получится коллекция однотипных документов без связей - самое то.
Anton
где разные ответы на разные формы, где то например 5 ответов, где то больше, при этом формат вопросов тоже разный (1 выбор, мультивыбор, текстовое поле, загрузка изображения)
Alex
Если данные не надо связывать - это просто разные коллекции будут, по одной на каждую форму.
Anton
Если данные не надо связывать - это просто разные коллекции будут, по одной на каждую форму.
спасибо за ответы! а при высокой нагрузке, например 1000 разных форм и несколько десятков новых создаваемых юзерами каждый день, сильно ли это скажется на скорости и производительности?
Anton
просто у меня в голове коллекция = таблица, а в sql такое ну сложновато исполнить
Alex
Скорее всего никак не скажется. Я бы и за 1000 форм в минуту сильно не переживал.
Богдан
Всем привет! Ребята, а как в много хранить фотографии? Записывать в саму базу или в папку, а в базу путь к файлу?
Богдан
Второе
Благодарю!
Алексей
так в монге же есть гридфс -кидай туда, она сохранит сам файл а тебе даст ид, по которому потом выдернуть можно
Алексей
ну вот, что и надо, а не просто куда то самому в папки класть
Roman
гораздо проще когда база отдельно, а файлы отдельно
Алексей
чем проще? если в базу такая фишка встроена и она по ид выдаст тебе файл например для отправки через апи. просто ты привык так работать, а теперь можно все в одном
Roman
а файлы пользователей надо все-равно реже дампить, чем базу, и сжимать их нужно
Roman
Еще в зависимости от того как отдаешь файлы можно кеширование включить, а с gridfs - сомневаюсь
Roman
Вообще я видел пару раз как файлы хранили в базе, а потом их убирали с базы
Death
Здравствуйте, подскажите пожалуйста как обновить документ сразу пример await User.updateOne({ id: uid}, { $set: {inactive: [] })
of Astora 𒉭
но при апдейтОне оно кажется не вернет твои данные
Death
new: true
Пробовал, результат тот же
of Astora 𒉭
Да не возвращает
засунь в файндБайАдиЭндАпдецт
Death
засунь в файндБайАдиЭндАпдецт
Спасибо большое, попробую
.
Ребят , подскажите пожалуйста , есть в базе поле value, и мне нужно достать суммы этого поля за любой промежуток времени, включая те случаи, когда сумма этого поля например за день равно 0,но достаю все значения,кроме 0.
.
А есть пример того, как Вы это делаете?
{ '$match': { 'dt': { '$gte': 'start_date', '$lte': 'end_date' } } }, { '$group': { '_id': { 'year': {'$year': '$dt'}, 'month': {'$month': '$dt'}, 'day': {'$dayOfMonth': '$dt'}, }, 'sum_value': {'$sum': '$value'} } }, { '$project': { '_id': 0, 'date': { '$dateFromParts': { 'year': '$_id.year', 'month': '$_id.month', 'day': '$_id.day', } }, 'sum_value': 1 } }
Death
{ '$match': { 'dt': { '$gte': 'start_date', '$lte': 'end_date' } } }, { '$group': { '_id': { 'year': {'$year': '$dt'}, 'month': {'$month': '$dt'}, 'day': {'$dayOfMonth': '$dt'}, }, 'sum_value': {'$sum': '$value'} } }, { '$project': { '_id': 0, 'date': { '$dateFromParts': { 'year': '$_id.year', 'month': '$_id.month', 'day': '$_id.day', } }, 'sum_value': 1 } }
db.collection.aggregate([ { '$match': { 'dt': { '$gte': 'start_date', '$lte': 'end_date' }, 'value': {'$ne': 0} } }, { '$group': { '_id': { 'year': {'$year': '$dt'}, 'month': {'$month': '$dt'}, 'day': {'$dayOfMonth': '$dt'}, }, 'sum_value': {'$sum': '$value'} } }, { '$project': { '_id': 0, 'date': { '$dateFromParts': { 'year': '$_id.year', 'month': '$_id.month', 'day': '$_id.day', } }, 'sum_value': 1 } } ]) Попробуйте вот так
-
Моё предположение, что он хочет до заполнить результат нулями, где есть пропуски
Death
не помогло
db.collection.aggregate([ { '$match': { 'dt': { '$gte': 'start_date', '$lte': 'end_date' } } }, { '$unwind': '$value' }, { '$group': { '_id': { 'year': {'$year': '$dt'}, 'month': {'$month': '$dt'}, 'day': {'$dayOfMonth': '$dt'}, }, 'sum_value': {'$sum': '$value'} } }, { '$project': { '_id': 0, 'date': { '$dateFromParts': { 'year': '$_id.year', 'month': '$_id.month', 'day': '$_id.day', } }, 'sum_value': 1 } }, { '$project': { 'date': 1, 'sum_value': {'$ifNull': ['$sum_value', 0]} } } ])
.
Ааа
ну да,все равно без нулей
-
ну да,все равно без нулей
Скажи, у тебя прям есть запись с нулём или нет?
.
да
.
есть, даже целые дни, в которых все значения равны 0
-
По пробуй группировку сделать через $dateTrunc
-
Используй unit: day
.
у меня бот, ему на вход даешь json такого формата { "dt_from": "2022-10-01T00:00:00", "dt_upto": "2022-11-30T23:59:00", "group_type": "day" }