Just
Такой кейс
Есть документы с полем field и без этого поля
Мне нужно получить все документы без этого поля
Эффективнее будет sparse индекс или обычный в данном случае?
Обычный индекс содержит в себе документы с этим полем, он не собирает документы, где это поле отсутствует? А в случае если поле, например, null, тогда он и эти документы индексирует?
Sparse индекс содержит тоже документы только с этим полем
Получается, разницы нет в моем кейсе?
Nick
Вячеслав
Доброе утро, господа.
Подскажите, есть коллекция, где хранятся сведения об электронных письмах, если коротко:
{_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 всё таки присутствует
Yaroslav
Андрей
Всем привет!
Подскажите плз, у меня две монговские базы. Если я содам документ в 1 базе такого вида:
{
_id: ObjectId('222') // Сгенерированный при создании базой
name: 'offer',
company: "id" // ObjectId Сгенерированный в другой коллекции базой
}
и потом через какое-то время отправлю его во вторую базу в таком виде
{
name: 'offer',
company: "id" // ObjectId
}
может ли айдишник поля company, сгенерированный первой базой как-то получиться таким же у какой-нибудь записи во второй базе?
Назар
всем привет. У меня есть документы в коллекции, есть 2 поля isUnique и partNumber. Мне нужно, чтоб если уже есть в коллекции isUnique=true и partNumber=123123, то чтоб нельзя было добавить новый документ с таким partNumber. Можно это как то сделать?
Алексей
Назар
Nick
yopp
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"],
],
},
}
]
вопрос в том как из внешней переменной объекта по ключу внутренней переменой агрегации, вытащить значение объекта?
Nick
Всем привет!
Кто подскажет как реализовать такую ситуацию?
const livedMonthsWeight = {
1: 10,
3: 25,
6: 50,
12: 100,
};
await Hoodrate.aggregate([
{
$group: {
_id: null,
people: {
$multiply: [
"$base.people", livedMonthsWeight["$livedMonths"],
],
},
}
]
вопрос в том как из внешней переменной объекта по ключу внутренней переменой агрегации, вытащить значение объекта?
перестроить с использованием $switch
Вася
Вася
Nick
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 K.
Anton
Всем привет
Anton
Как думаете, приложение по типу гугл формс (опросник) лучше на реляционной или документоориентированной базе данных делать?
Alex
Как вам удобнее будет. Я бы положил в Монгу, если все данные будут заполняться через форму и других не будет. Так получится коллекция однотипных документов без связей - самое то.
Anton
Anton
где разные ответы на разные формы, где то например 5 ответов, где то больше, при этом формат вопросов тоже разный (1 выбор, мультивыбор, текстовое поле, загрузка изображения)
Alex
Если данные не надо связывать - это просто разные коллекции будут, по одной на каждую форму.
Anton
просто у меня в голове коллекция = таблица, а в sql такое ну сложновато исполнить
Alex
Скорее всего никак не скажется. Я бы и за 1000 форм в минуту сильно не переживал.
Богдан
Всем привет! Ребята, а как в много хранить фотографии? Записывать в саму базу или в папку, а в базу путь к файлу?
Anton
Богдан
Алексей
так в монге же есть гридфс -кидай туда, она сохранит сам файл а тебе даст ид, по которому потом выдернуть можно
Roman
Алексей
ну вот, что и надо, а не просто куда то самому в папки класть
Roman
Roman
гораздо проще когда база отдельно, а файлы отдельно
Алексей
чем проще? если в базу такая фишка встроена и она по ид выдаст тебе файл например для отправки через апи.
просто ты привык так работать, а теперь можно все в одном
Roman
Roman
Roman
а файлы пользователей надо все-равно реже дампить, чем базу, и сжимать их нужно
Roman
Еще в зависимости от того как отдаешь файлы можно кеширование включить, а с gridfs - сомневаюсь
Roman
Вообще я видел пару раз как файлы хранили в базе, а потом их убирали с базы
Death
Здравствуйте, подскажите пожалуйста как обновить документ сразу пример
await User.updateOne({ id: uid}, { $set: {inactive: [] })
of Astora 𒉭
of Astora 𒉭
но при апдейтОне оно кажется не вернет твои данные
Death
Death
.
Ребят , подскажите пожалуйста , есть в базе поле value, и мне нужно достать суммы этого поля за любой промежуток времени, включая те случаи, когда сумма этого поля например за день равно 0,но достаю все значения,кроме 0.
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
}
}
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
}
}
])
Попробуйте вот так
-
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
}
}
])
Попробуйте вот так
Это не поможет ему т.к. ему нужен и 0
-
Моё предположение, что он хочет до заполнить результат нулями, где есть пропуски
.
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]}
}
}
])
-
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]}
}
}
])
Зачем unwind, если это не массив
Death
.
Ааа
ну да,все равно без нулей
.
да
.
есть, даже целые дни, в которых все значения равны 0
-
По пробуй группировку сделать через $dateTrunc
-
Используй unit: day
.
у меня бот, ему на вход даешь json такого формата {
"dt_from": "2022-10-01T00:00:00",
"dt_upto": "2022-11-30T23:59:00",
"group_type": "day"
}