Nick
Alexandrr
разрешите общий вопрос - на счёт логов монги
как вы их используете?
для чего?
с помощью чего с ними работаете?
у кого какие практики с ними?
Александр
Здравствуйте, есть ли гарантии на то, что во время исполнения запроса все join и подзапросы внутри него увидят одно состояние базы?
Alexandrr
Alexandrr
Ivan
Привет. есть такое поле в схеме
...
participants: {
type: Object,
of: {
id: {
user: {
type: Schema.Types.ObjectId,
ref: 'user',
},
entryTime: Date,
exitTime: Date,
browser: Object,
_id: false,
},
},
default: {},
},
...
мне нужно получать данные user-ов в развернутом виде, но такая запись не работает (понятно, почему)
.populate({ path: 'participants', populate: { path: 'user', model: 'user' } })
не понимаю и не могу найти, как мне можно сделать это внутри объекта.
подскажите, пожалуйста
Maxmudjon
Привет. есть такое поле в схеме
...
participants: {
type: Object,
of: {
id: {
user: {
type: Schema.Types.ObjectId,
ref: 'user',
},
entryTime: Date,
exitTime: Date,
browser: Object,
_id: false,
},
},
default: {},
},
...
мне нужно получать данные user-ов в развернутом виде, но такая запись не работает (понятно, почему)
.populate({ path: 'participants', populate: { path: 'user', model: 'user' } })
не понимаю и не могу найти, как мне можно сделать это внутри объекта.
подскажите, пожалуйста
.populate({path:”participants.of.id.user”, model: “user”})
Ivan
Ivan
я знаю, что можно с помощью arrayFilters указывать переменную в пути, которой является ключ здесь, но в данном случае с ней не сделать, наверное
Maxmudjon
Maxmudjon
работает!
Maxmudjon
Ivan
of - это не поле. Как я понял, так в схеме обозначается связь ключ - значение
participants = {
'id_1': {
user: ... ,
},
'id_2': {
user: ... ,
},
}
Ivan
тоже не работает :(
Dmitry
Привет. есть такое поле в схеме
...
participants: {
type: Object,
of: {
id: {
user: {
type: Schema.Types.ObjectId,
ref: 'user',
},
entryTime: Date,
exitTime: Date,
browser: Object,
_id: false,
},
},
default: {},
},
...
мне нужно получать данные user-ов в развернутом виде, но такая запись не работает (понятно, почему)
.populate({ path: 'participants', populate: { path: 'user', model: 'user' } })
не понимаю и не могу найти, как мне можно сделать это внутри объекта.
подскажите, пожалуйста
Если не получается сделать через populate, тогда в качестве решения можно воспользоваться $lookup
Ivan
нет, ни разу не пользовался
Ivan
в том и дело, что в массивах такие действия не вызывают никаких сложностей, а вот во вложенных объектах - вообще никак
Ivan
так у меня объекты в объектах. ну и в любом случае lean не использую. вся проблема в ключе, видимо. я знаю только как точечно обратиться к конкретному ключу, а чтобы в общем - хз. и что-то даже похожего случая не могу найти. может действительно только $lookup поможет, но я не пробовал так еще
Константин
всем привет ))
подскажите что не правильно делаю при агрегации
const todoCollections = await Todo.aggregate([
{
$lookup: {
from: 'users',
localField: 'user_id',
foreignField: '_id',
as: 'user'
}
},
{
$match: {
user_id: mongoose.Types.ObjectId(id),
completed: false
}
},
{
$sort: {
updatedAt: 1
}
},
{ $skip: offset },
{ $limit: limitQ }
]);
если completed == false, то все нормально отбирается, если true, то возвращается 0, хотя с состоянием true в коллекции есть записи
кроме того в Compass проверяю эту конструкцию и все работает с true / false нормально
Константин
Ivan
Привет. есть такое поле в схеме
...
participants: {
type: Object,
of: {
id: {
user: {
type: Schema.Types.ObjectId,
ref: 'user',
},
entryTime: Date,
exitTime: Date,
browser: Object,
_id: false,
},
},
default: {},
},
...
мне нужно получать данные user-ов в развернутом виде, но такая запись не работает (понятно, почему)
.populate({ path: 'participants', populate: { path: 'user', model: 'user' } })
не понимаю и не могу найти, как мне можно сделать это внутри объекта.
подскажите, пожалуйста
может кому будет полезно. чтобы развернуть данные каких-то полей внутри объекта или Map-а у всех элементов нужно написать так
.populate([
{
path: 'field.$*',
...
Nick
всем привет ))
подскажите что не правильно делаю при агрегации
const todoCollections = await Todo.aggregate([
{
$lookup: {
from: 'users',
localField: 'user_id',
foreignField: '_id',
as: 'user'
}
},
{
$match: {
user_id: mongoose.Types.ObjectId(id),
completed: false
}
},
{
$sort: {
updatedAt: 1
}
},
{ $skip: offset },
{ $limit: limitQ }
]);
если completed == false, то все нормально отбирается, если true, то возвращается 0, хотя с состоянием true в коллекции есть записи
кроме того в Compass проверяю эту конструкцию и все работает с true / false нормально
Что такое "нормально"? И делайте лукапы после всех фильтраций и скип лимитов, т.к вы не работаете с подтянутым содержимым
Nick
Nick
Lucky SB
Добрый вечер. Пришлось тут поставить mongodb В кластер куба. Ставил чартом от bitnami
По требованию программистов версия старая - 4.2.21
в чарте от битнами риднесс и ливнесс пробы делаются через запуск mongosh
и таймаута в 5 секунд не хватает на проверку!!!
если тыкать руками, то с момента запуска `mongosh`до появления консоли проходит достаточно много времени. иногда и больше 5 секунд.
в общем то место где искать понятно.
А можете посоветовать как-бы расширенные логи получить с монги и mongosh, чтобы понять в каком месте оно так безбожно тормозит.
и там везде ipv6 only
Nick
Lucky SB
Maksim
Добрый вечер. Подскажите, есть ли готовые "фреймворки" или "админки" для MEAN стэка? Делаю свой сайт, и как-то не хочется делать с нуля панель для управления контентом
Sergey spbsite
Евгений
Всем привет, как получить через find значения полей которые не null, то есть чтоб null не было
Sergey spbsite
Try $pull to remove element from array, and updateMany() not require multi: true option,
.updateMany(
{ meta: null },
{ $pull: { meta: null } }
)
Sergey spbsite
https://www.tutorialspoint.com/remove-null-element-from-mongodb-array
Lucky SB
he MongoDB Shell, mongosh, is a fully functional JavaScript and Node.js
мда. бинарник в 160 мегабайть. жаба и ноджс в одном флаконе.
в общем внутри контейнера mongosh --help запускается 3-4 секунды....
Поменяю на запуск через старый шелл mongo
Valeriya
всем привет! у меня есть mongodb replica set состоящий из 3 нод ( master > slave > slave ), когда выключаю два слейва ( service mongod stop ) мой оставшийся мастер через 15 секунд превращается в secondary, почему так происходит?
Lucky SB
vital
Всем привет а подскажите есть ли команда которая переведет 1 из нескольких shard в состояние только для чтения? чтобы дальше распределение chunks было только на другие шарды?
Тим
Подскажите какой тип нужен для цены с плавающей точкой
Тим
Alexandrr
спасибо
инты "с копейками" - это когда у тебя 10 руб 79 коп отображается в виде 1079, валюта руб
просто 10 руб - отображается как 1000 руб
ну и не забывать об этом ни тебе, ни фронту
Тим
Roman
Подскажите почему $lookup выдает [[ Object ]] вместо объединения двух коллекций. В одной коллекции _id документов в массиве. В другой коллекции просто документы с ключом в виде _id. Обьединяю в $lookup по этим id.
Dmitry
Roman
$lookup должен объединять по множеству документов разве нет?
Sergey
парни такой вопрос. я тут на низком старте, собираюсь шардироваться... и собсьвенно вопрос, как мне обеспечить HA коннект к mongoS'ам? можно ли их перечислить в коннекшен урле spring'а (вроде нет)? Городить HAproxy перед монгосами?
Ayrat
всем привет, а почему sign in на сайте Монги не работает??!
Sergey
Ayrat
Ayrat
и signup не заходит
Ayrat
с компа и ноута, через разные провайдеры
Ayrat
Sergey
Ayrat
Ayrat
Sergey
а с mongoS'ом то ктонибудь поможет?
Константин
Sergey
Константин
можно ручками или в docker:
FROM mongo:5
# Make MongoDB a replica set to support transactions. Based on https://stackoverflow.com/a/68621185/1952977
RUN apt-get update && apt-get install patch
# How to create scripts/docker-entrypoint.sh.patch
# 1. Download the original file:
# wget https://github.com/docker-library/mongo/raw/master/5.0/docker-entrypoint.sh
# ( wget https://github.com/docker-library/mongo/raw/b5c0cd58cb5626fee4d963ce05ba4d9026deb265/5.0/docker-entrypoint.sh )
# 2. Make a copy of it:
# cp docker-entrypoint.sh docker-entrypoint-patched.sh
# 3. Add required modifications to docker-entrypoint-patched.sh
# 4. Create patch:
# diff -u docker-entrypoint.sh docker-entrypoint-patched.sh > scripts/docker-entrypoint.sh.patch
# 5. Clean up:
# rm docker-entrypoint.sh docker-entrypoint-patched.sh
COPY scripts/docker-entrypoint.sh.patch .
RUN patch /usr/local/bin/docker-entrypoint.sh docker-entrypoint.sh.patch
ENTRYPOINT ["docker-entrypoint.sh"]
Константин
а это сам patch
--- ./docker/mongodb/docker-entrypoint.sh 2022-11-23 11:21:07.329753300 +0700
+++ ./docker/mongodb/docker-entrypoint-patched.sh 2022-11-23 12:24:15.039206200 +0700
@@ -299,6 +299,10 @@
fi
if [ -n "$shouldPerformInitdb" ]; then
+
+ openssl rand -base64 756 > /etc/mongo-key/mongodb.key
+ chmod 400 /etc/mongo-key/mongodb.key
+
mongodHackedArgs=( "$@" )
if _parse_config "$@"; then
_mongod_hack_ensure_arg_val --config "$tempConfigFile" "${mongodHackedArgs[@]}"
@@ -419,7 +423,14 @@
set -- "$@" --bind_ip_all
fi
- unset "${!MONGO_INITDB_@}"
+ echo 'Initiating replica set'
+ "$@" --logpath "/proc/$$/fd/1" --fork
+ echo 'rs.initiate({"_id":"rs","members":[{"_id":0,"host":"m0:27017"},{"_id":1,"host":"m1:27017"},{"_id":2,"host":"m2:27017"}]});' | mongosh -u "$MONGO_INITDB_ROOT_USERNAME" -p "$MONGO_INITDB_ROOT_PASSWORD"
+ "$@" --logpath "/proc/$$/fd/1" --shutdown
+ echo 'Done initiating replica set'
+
+ unset "${!MONGO_INITDB_@}"
+
fi
rm -f "$jsonConfigFile" "$tempConfigFile"
можешь свой написать, в зависимости сколько реплик / шардов
Константин
шарды прописываются в этой строке
echo 'rs.initiate({"_id":"rs","members":[{"_id":0,"host":"m0:27017"},{"_id":1,"host":"m1:27017"},{"_id":2,"host":"m2:27017"}]});' | mongosh -u "$MONGO_INITDB_ROOT_USERNAME" -p "$MONGO_INITDB_ROOT_PASSWORD"
в данном случае 2 slave - m1 & m2
Sergey
Sergey
Nick
Константин
Nick
думаю тут стоит сходить на гитхаб с создать ишью в спринг монге, как ни странно нигде нет упоминаний о подобном
Nick
из примеров подключения к шард кластеру https://www.mongodb.com/docs/manual/reference/connection-string/#examples просто указываем списком
mongodb://mongos0.example.com:27017,mongos1.example.com:27017,mongos2.example.com:27017
а дальше вопрос в поддержке в спринге и возможно в джава драйвере
Sergey
Sergey
GagoChad
Здравствуйте, я подключился к mongodb через кластер, раньше он функционировал, но сейчас он приостановлен. как мне возобновить деятельность кластера?
GagoChad
C
Может кто подсказать, как мне пройтись по этому массиву и убрать все невалидные объекты, в которых id привязан к удаленному юзеру?(уже не существует записи)
Nick