Пол
Спс
Anonymous
Dmitry
Cry
Привет всем! Ребята подскажите как лучше сделать или хотя бы намекните. Необходимо получить ссылки на другие объекты в массив, но не просто id, а в виде url (node, express, mongodb) Пример: https://localhost:8080/api/character/60ef1856eb90c7bdf68f21eb
Cry
Eva🇺🇦
Cry
создаю список пользователей
Cry
и потом делаю загрузку
Cry
id получаю
Cry
но хотелось ссылки чтоб потом можно было использовать
Eva🇺🇦
Это плохая практика сохранять преображённую информацию в документе. Потом может пригодиться первичный формат, потому я бы оставила именно список id в том поле. А если тебе нужны будут именно ссылки, то просто обращаешься к полю characters -> получаешь массив -> используешь метод map(), который возвращает новый массив уже ссылок. Понял суть?
Eva🇺🇦
.map(id => ' https://localhost:8080/api/character/' + id) вот такая функция будет в мапе) Очень просто
Вот ещё будет полезно почитать, но это немного для другого используется:
https://docs.mongodb.com/manual/core/aggregation-pipeline/
https://docs.mongodb.com/manual/core/views/
Cry
спасибо! Я тоже так подумал, но почему то посмотрел примеры различные и подумал а почему бы нет)
Dmytro
Привет ребята, подскажите пожалуйста, как зайти в блок .catch() если запись не найдена
Liber
Здравстуйте. Подскажите, как правильнее всего реализовывать связь один ко многим в MongoDB и стоит ли вообще.
Предположим, у меня есть пользователь, он может создавать публикации. На публикации можно реагировать(лайк) и писать комментарии, на которые тоже можно реагировать(лайк).
Насколько я понимаю, в нереляционных документоориентированных базах данных является нормальной практикой вставлять некоторых данные прямо в документ. Однако я читал также данную доку, вроде бы реализуется вполне реляционный подход: https://docs.mongodb.com/manual/tutorial/model-referenced-one-to-many-relationships-between-documents/
Я сначала рассматривал мысль о том, чтобы сделать в документе пользователя массив ссылок на посты, но теперь склоняюсь к тому, чтобы у каждого поста была ссылка на пользователя. Думаю, это достаточно логично. Но теперь есть другой вопрос: стоит ли так делать с комментариями/лайками?
На данный момент я предполагаю в документе поста сделать массив ссылок на пользователей, который будет обозначать лайки, а также массив объектов комментариев, с точно таким же полем массивом ссылок на пользователей для лайков, не выделяя комментарий в отдельную коллекцию.
Стоит ли делать так или всё же создать отдельную коллекцию для комментариев?
Aryn
Всем привет!
В документах есть ключ "count", как можно отсортировать по count?
.sort({"count": 1}) ?
Aryn
Как добавить документ в список?
Nick
Здравстуйте. Подскажите, как правильнее всего реализовывать связь один ко многим в MongoDB и стоит ли вообще.
Предположим, у меня есть пользователь, он может создавать публикации. На публикации можно реагировать(лайк) и писать комментарии, на которые тоже можно реагировать(лайк).
Насколько я понимаю, в нереляционных документоориентированных базах данных является нормальной практикой вставлять некоторых данные прямо в документ. Однако я читал также данную доку, вроде бы реализуется вполне реляционный подход: https://docs.mongodb.com/manual/tutorial/model-referenced-one-to-many-relationships-between-documents/
Я сначала рассматривал мысль о том, чтобы сделать в документе пользователя массив ссылок на посты, но теперь склоняюсь к тому, чтобы у каждого поста была ссылка на пользователя. Думаю, это достаточно логично. Но теперь есть другой вопрос: стоит ли так делать с комментариями/лайками?
На данный момент я предполагаю в документе поста сделать массив ссылок на пользователей, который будет обозначать лайки, а также массив объектов комментариев, с точно таким же полем массивом ссылок на пользователей для лайков, не выделяя комментарий в отдельную коллекцию.
Стоит ли делать так или всё же создать отдельную коллекцию для комментариев?
для начала определитесь что к чему принадлежит и что будет происходить когда чтото будет удаляться, думаю тут все встанет свои места само собой. Могу сказать что лишний раз работать с массивами, тем более вложенными в другие массивы будет не всегда просто, а то и невозможно для некоторых вещей, которые захочется провернуть, поэтому массивами не увлекайтесь. В вашем случае органичным видятся три коллекции - юзеры, посты, комменты. У поста есть автор, у коммента есть автор и ссылка на пост + возможно на родительский коммент, если будете деревья строить - чистая реляционщина. А вот лайки уже можно в виде массивов в постах и комментах для упрощения жизни (хотя упрощение только таким кажется)
Liber
для начала определитесь что к чему принадлежит и что будет происходить когда чтото будет удаляться, думаю тут все встанет свои места само собой. Могу сказать что лишний раз работать с массивами, тем более вложенными в другие массивы будет не всегда просто, а то и невозможно для некоторых вещей, которые захочется провернуть, поэтому массивами не увлекайтесь. В вашем случае органичным видятся три коллекции - юзеры, посты, комменты. У поста есть автор, у коммента есть автор и ссылка на пост + возможно на родительский коммент, если будете деревья строить - чистая реляционщина. А вот лайки уже можно в виде массивов в постах и комментах для упрощения жизни (хотя упрощение только таким кажется)
Ну, на самом деле это не слишком серьёзный проект и ни посты, ни комментарии удаляться не будут. :) Посты меняются комментариями и лайками, так что это точно хорошая идея отделить их от пользователя, хотя это и так понятно, был вопрос лишь как. А так, комментарии, к примеру, даже меняться не будут, не то что удаляться. Но в принципе, меня всё равно больше интересовала правильная структура для документоориентрованной бд, нежели использовать отсутствие необходимости в определённой функциональности в проекте. В любом случае спасибо за развёрнутый ответ
Anonymous
Не тебе
Anonymous
Shane
привет
Shane
подскажите как лучше решить подсчет всех записей
Shane
в одной таблице 250тыс записей, во 2 - 470тыс
Shane
.count() занимает 12 секунд
Shane
хотелось бы сократить время
Anonymous
Aryn
Anonymous
Кто может подсказать по чистой архитектуре, у меня есть данные, и вот такой вот класс, как прокидывать этот айдишник в будущем(юзатся монга будет)
export class AccountEntity{
private readonly posts: PostEntity[]
constructor(
private readonly _id: AccountId,
private readonly login: string,
private readonly password: string,
private readonly username: string,
private readonly refreshToken: string,
){}
get id(): AccountId{
return this._id;
}
public add(title: string){
const post = new PostEntity(, title, this.id)
}
}
Anonymous
если это офф топ то извините
Aryn
Ребята, а можно как-то достать не-повторяющиеся документы с неопределённым содержимым?
Вот пример документа:
{
"_id": ObjectId,
"chat_id": int,
"members": [{
"user_id": int,
"count": int
}]
}
Нужно достать кол-во уникальных members.user_id
Anonymous
агрегациями
Anonymous
distinct
Anonymous
Anonymous
db.collection("collection").distinct("members.user_id")
Aryn
Anonymous
Получилось?
Anonymous
Сяб!
У меня в плейграунде нет, только через агрегации
Anonymous
надо параметры посмотреть
Aryn
Anonymous
дистинкта
Denis
Привет, такой вопрос про изоляцию курсора. Например такой датасет
[{
docId: 1,
updatedAt: 15:31
}, {
docId: 2,
updatedAt: 15:32
}]
Я делаю find по условию updatedAt <= 15:33, получаю в ответ курсор.
Получил первый документ, сделал свою бизнес логику (например заняло 3 секунды), пока шли эти 3 секунды, документ docId: 2 обновили, далее я итерируюсь по курсору дальше. И docId: 2 получается перестал удовлетворять условию курсора updatedAt <= 15:33. Я получу его или нет? Судя по документации я получу обновленный документ 2 раза, один раз старый и один раз новый, я правильно все понял?
Ilya
у @aryn_bots наверное действительно огромный вопрос
Aryn
Aryn
Denis
Aryn
Aryn
Сейчас так, но, как мне кажется, оно заменит весь документ
Anonymous
Anonymous
как-то так
Anonymous
$ вот эта штука подставит туда совпавший индекс
Denis
А как обновить?
$set: {
"members.pepega": "kek"
}
если members объект, если массив то ответ выше
Anonymous
и измеит его
Aryn
@aveDenis и @mxxnseat, спасибо!
Aryn
Anonymous
?
Aryn
?
{"members.$": somevalue}
Anonymous
да
Anonymous
если все надо обновить
Aryn
Anonymous
хотя я не уверен)
Anonymous
ну поидеи да
Aryn
Anonymous
агрегированием
Anonymous
скинь сюда колекцию
Anonymous
ща в сандбоксе сделаю
Aryn
Anonymous
обычно
Aryn
Anonymous
members
Anonymous
https://mongoplayground.net/p/r2QKMnZp82X
Aryn
Anonymous
res[0]
Anonymous
или как у вас там в ваших питонах
Aryn
res[0]
А в результате получить никак?