Вадим
Всем салют, может кто поможет советом или направлением куда копать, вот в каком вопросе...
Проблема такая, есть сервис на go, запускается скажем в 10 потоков (может сильно больше).
Каждый сервис обрабатывает файл, и нужные данные из него собирает в документ,
а дальше документ вставляет в коллекцию в mongoDB.
У документов есть номер и версия, и перед тем как вставить в монгу, делается запрос по номеру документа.
Если документа нет - идет вставка.
Если есть - сравниваются версии,
если у нового документа версия больше, чем у документа в монге - документ в монге заменяется новым документом (с большей версией).
Но из-за параллельной работы сервисов получается так, что например в нескольких работающих сервисах, одновременно обрабатывается документ с одним и тем же номером,
но разными версиями.
И при поиске (запрос в монгу) все сервисы получают, что документа с таким номером нет,
и все 3 сервиса добавляют один и тот же документ но с разной версией.
пробовал на mongo 4.0, 4.2, 5
Пробовал replaceOne
Индекс есть на номер документа
Пробовал транзакции, не спасают, с разницей от 1 до 150 мс вижу в дате создания документа в коллекции.
Вот собственно вопрос, что можно еще сделать/попробовать чтоб не было дублей в монге при многопоточной работе сервисов? может я в поисках своих что-то упустил?
Арсен
Всем привет, кто-то знает, как-то можно в MongoDB 4.4 значение провалидировать. Чтобы функция $regex не ломалась, если передадут туда скобки или обратные слэши?
Арсен
Или как можно не через регулярку написать запрос, чтобы получать все элементы при пустом значении строки(и те объекты, где поле с пустой строкой и те, что не с пустой), а если что-то есть в значении, то искать по нему?
Artur
const preferencesSchema = new Schema({
user: { type: Schema.Types.ObjectId, ref: 'user' },
apps: {
type: {
type: Map, of: {
_id: String,
app:
{ headers: [Schema.Types.String] }
}
}
},
});
How set key as appId and value as object ?
Арсен
Пример: в коллекции есть объекты с полем name, у некоторых name: '', у некоторых name:'Имя' и т.д.
# - это переменная
{ 'name' : # }, надо, чтобы этот запрос возвращал:
если # пустой, то объекты у которых name : '' или у которых в нём что-то есть name : 'Имя',
если # что-то в себе содержит, то фильтровать объекты по содержанию в поле данного значения, в идеале, чтобы ещё была возможность модифицировать запрос так, чтобы поиск был по началу строки и без учёта регистра
Artur
const preferencesSchema = new Schema({
user: { type: Schema.Types.ObjectId, ref: 'user' },
apps: {
type: {
type: Map, of: {
_id: String,
app:
{ headers: [Schema.Types.String] }
}
}
},
});
How set key as appId and value as object ?
Astik
Здравствуйте, помогите пожалуйста как можно отсортировать коллекцию методом $sort по id и менять в значение по убыванию каждый раз?
Nick
Astik
Nick
Astik
Например есть значения 3 6 8 9 11
Каждый раз при запуске он должен менять например на 3 потом на 6 потом на 8 и тд
Astik
Vladimir
Кто пользовался ElastickSearch ?
Это нормально, что он жрёт почти 9 гб оперы?
Igor
Vladimir
😳😳😳
Nick
😳😳😳
https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#heap-size-settings
fenogentov
Мне необходимо получить работающие команды
getParameter, showDetails, allParameters
Но так и не смог найти работающую версию
Судя по описаниям надо настраивать Монгу, но нет указаний как
Кто-то знает как это делается?
fenogentov
fenogentov
естественно, к другой он просто не отвечает
Nick
показывайте как делаете запрос и какая версия бд
fenogentov
fenogentov
Nick
fenogentov
5.0.7
Nick
вот такое я вижу на атласе в шардированном кластере
Nick
а такое на стендалоне правда старой 4 версии
fenogentov
отлично, осталось и мне увидеть ))
Astik
Здравствуйте, помогите пожалуйста как можно отсортировать коллекцию методом $sort по id и менять в значение по убыванию каждый раз?
Astik
почему никто не хочет помочь ?
Nick
5.0.7
это было не просто) короч вам надо обновиться до 5.0.8 https://jira.mongodb.org/browse/SERVER-58506
fenogentov
большое спасибо, обновился, появилось
qaınar
Ребят всем привет. помогите мне. я новичок. для эксперимента делаю небольшой сайт. есть модель и сделал сервис по созданию объекта. но никак не могу получить только один объект. как я могу получить ObjectId? или есть функция как у sequalize auto-increment чтобы дать к айди? подскажите что я могу сделать
Nick
Artemij
Всем салют, может кто поможет советом или направлением куда копать, вот в каком вопросе...
Проблема такая, есть сервис на go, запускается скажем в 10 потоков (может сильно больше).
Каждый сервис обрабатывает файл, и нужные данные из него собирает в документ,
а дальше документ вставляет в коллекцию в mongoDB.
У документов есть номер и версия, и перед тем как вставить в монгу, делается запрос по номеру документа.
Если документа нет - идет вставка.
Если есть - сравниваются версии,
если у нового документа версия больше, чем у документа в монге - документ в монге заменяется новым документом (с большей версией).
Но из-за параллельной работы сервисов получается так, что например в нескольких работающих сервисах, одновременно обрабатывается документ с одним и тем же номером,
но разными версиями.
И при поиске (запрос в монгу) все сервисы получают, что документа с таким номером нет,
и все 3 сервиса добавляют один и тот же документ но с разной версией.
пробовал на mongo 4.0, 4.2, 5
Пробовал replaceOne
Индекс есть на номер документа
Пробовал транзакции, не спасают, с разницей от 1 до 150 мс вижу в дате создания документа в коллекции.
Вот собственно вопрос, что можно еще сделать/попробовать чтоб не было дублей в монге при многопоточной работе сервисов? может я в поисках своих что-то упустил?
привет. что нибудь нашли дельное по своему вопросу?
Artemij
Nick
Всем салют, может кто поможет советом или направлением куда копать, вот в каком вопросе...
Проблема такая, есть сервис на go, запускается скажем в 10 потоков (может сильно больше).
Каждый сервис обрабатывает файл, и нужные данные из него собирает в документ,
а дальше документ вставляет в коллекцию в mongoDB.
У документов есть номер и версия, и перед тем как вставить в монгу, делается запрос по номеру документа.
Если документа нет - идет вставка.
Если есть - сравниваются версии,
если у нового документа версия больше, чем у документа в монге - документ в монге заменяется новым документом (с большей версией).
Но из-за параллельной работы сервисов получается так, что например в нескольких работающих сервисах, одновременно обрабатывается документ с одним и тем же номером,
но разными версиями.
И при поиске (запрос в монгу) все сервисы получают, что документа с таким номером нет,
и все 3 сервиса добавляют один и тот же документ но с разной версией.
пробовал на mongo 4.0, 4.2, 5
Пробовал replaceOne
Индекс есть на номер документа
Пробовал транзакции, не спасают, с разницей от 1 до 150 мс вижу в дате создания документа в коллекции.
Вот собственно вопрос, что можно еще сделать/попробовать чтоб не было дублей в монге при многопоточной работе сервисов? может я в поисках своих что-то упустил?
поставить уникальный индекс на номер документа и тогда не будет дублей, все остальное либо транзакции либо upsert при условии что версия дока в базе меньше
Вадим
Nick
если вы пишите что появляются дубли - значит нет
Вадим
Upsert тоже не помог, там оч интересная ситуация
Scorpi
Всем привет
Подскажите, есть ли какой то способ узнать сколько памяти потребляет aggregate?
Запрос отваливается из-за нехватки памяти на sort, хочу попробовать оптимизировать, но не знаю как замерить как изменяется потребление памяти
Вадим
в одном потоке идет обработка документа с 3 версией
а в паралельном уже 4 версию добавил
и получается ищем <=3 и не находим( версия уже 4) и добавит "новую" запись с 3
Nick
Вадим
Вадим
Nick
Scorpi
Scorpi
Nick
работает
Scorpi
а, вижу, надо опцию использовать, сейчас попробую
Даниил Дмитриевич
Добрый день! подскажите пожалуйста, как удалить элемент массива? нужно найти его по полю "name" и удалить
использую mongo driver для golang
Nick
Hellomik
как сделать агрегацию
{
'$addFields': {
'workTime': '$workTime.[0].workTime'
}
Hellomik
{
workTime: {
$first: "$workTime.workTime"
}
} можно так но так себе
Даниил Дмитриевич
Sergey
Коллеги, а можно на вас попаразитировать? =)) Помогите плз.
Никак не могу нагуглить...Мне надо проверить ВСЕ вхождения в коллекцию, и в случае, если проверяемыЕ value = true, то изменить differentValue, (и двигаться дальше, по сути проверить все и поменять все - если надо) пока мысли только такие, что получить все и проитерироваться на моем сервере по всему массиву, но можно ли это сделать самой монгой?
Nick
Sergey
ничего не понятно, лучше небольшой пример
в коллекции есть два user, у который есть name u pass, Нужно проверить обоих и если user = Петя - поменять pass, если не Петя - то не менять, проверить надо всех
Josh
Обычный апдейт с условием
Sergey
Sergey
оно?
Josh
update
Sergey
@letitcode, Да, по ходу оно! Низкий поклон!
Eva🇺🇦
а как искать по вложенным филдам?
допустим, у юзера есть филд:
location: {
country: {
“europe”: true,
“postcode”: 7233,
“mobilePrefix”: “+32”
}
}
Надо найти всех юзеров с “europe”: true, на остальных пофиг
Какая кверя?
Nick
Josh
в кавычках правд
Andrew
Народ хелпаните)
могу ли я сделать вот такую популяцию? правильна ли запись?
await updated.populate([
{ path: 'user', populate: { path: 'game', populate: 'owner' } },
{ path: 'location', populate: 'world' },
]);
Andrew
Проблема просто в том, если я добавляю ещё один объект в популяцию { path: 'location', populate: 'world' }, то у меня первый объект не популяризируется, как быть?
Evgenii
Здравствуйте,
а подскажите пожалуйста как подключиться теперь к бд в node.js
Да, через mongoose.connect, но сейчас не коннектится
Как можно добавить впн для подключения?
winterfall
Evgenii
С Клауд сайта получил ссылку, а подключиться не получается) на Клауд без впн не зайти
Поэтому подумал что и к бд просто так сейчас подключиться не получится
Jayse
Всем привет, столкнулся с проблемой при запросе.
Есть документ вида:
{
"name": "username",
"comment" : [
{
"id": 123,
"text": "lala",
"create_date": 6789543 // timestamp
},
{
"id": 124,
"text": "lalalol",
"create_date": 6789544 // timestamp
},
{
"id": 125,
"text": "lala123",
"create_date": 6789545 // timestamp
}
]
},
{
"name": "username2",
"comment": [...]
}
Хочется взять из такого формата документа, все коментарии по username, которые больше определённого времени (create_date).
На выходе хочется, к примеру если name=username, create_date > 6789543:
[
{
"id": 124,
"text": "lalalol",
"create_date": 6789544 // timestamp
},
{
"id": 125,
"text": "lala123",
"create_date": 6789545 // timestamp
}
]
Подкажите куда смотреть.
Либо лучше делать связи и хранить в другом виде?