Дима
все
Дима
корень проблемы был в другом
Дима
await Post.update({_id: id}, { $push: { comments: comment._id } });
Дима
Приогрмнеешее спасибо!
Дима
Код решения: router.post('/:id/comment', async (req, res, next) => { mongoose.connect(db.url); var id = req.params.id; var post = await Post.findById(id); var comment = new Comment({ _id: new mongoose.Types.ObjectId(), text: req.body.comment, post: post._id, }); comment.save(); await Post.findByIdAndUpdate(id, { $push: { comments: comment._id } }); res.redirect('/posts/' + post._id); });
Дима
Т.е если имеем дело с массивами то нужен оператор $push
Nick
я в монгусе особо не шарю, но думаю нужно ознкомиться с http://mongoosejs.com/docs/api.html#types-array-js и докучи какие есть нативные средства самой монги https://docs.mongodb.com/manual/reference/operator/update-array/
Дима
Да, спасибо. Уже понял что средставми mongodb принебрегать не стоит. Лучше мне для начала получше бы разобраться с самой mongo
Дима
Есть еще такой вопрос. Я "вытягиваю" автора и комментарии для текущего поста: var post = await Post.findById(id).populate('user').populate({path: 'comments', populate: {path: 'user'}}).exec();
Дима
Проблема в том что в комментариях, в свйоство user прилетает [Object], а нужен полный список свойств пользователя
Дима
Вот так получается: { _id: 5a5c6caf7fd30a39c92ec6ee, title: '3213131', text: '31313123', user: { _id: 5a5c6cab7fd30a39c92ec6ed, firstname: 'Dmitriy', lastname: 'Doronin', email: 'dmitriy435@gmail.com', password: '321313', __v: 0 }, __v: 0, comments: [ { _id: 5a5c6cb97fd30a39c92ec6ef, text: 'уйцуйцууй', post: 5a5c6caf7fd30a39c92ec6ee, __v: 0, created: 2018-01-15T08:56:03.701Z }, { _id: 5a5c6cdb9ccd6039fc647c19, text: 'csacasc', post: 5a5c6caf7fd30a39c92ec6ee, user: [Object], __v: 0, created: 2018-01-15T08:56:56.119Z }, { _id: 5a5c6cfa4229273a46e66800, text: 'efwfewwfe', post: 5a5c6caf7fd30a39c92ec6ee, user: [Object], __v: 0, created: 2018-01-15T08:57:27.719Z } ], created: 2018-01-15T08:56:03.689Z, rating: 0 }
Дима
Т.е. я делаю популяцию для свойств user, comments + глубокую популяцию в comments - path: 'comments', populate: {path: 'user'}
Дима
там тоже есть свойство user
Дима
В шаблоне отображается как строка, т.к. при итерации comment in post.comments - comment.user обычная строка
Igor
Всем привет, продолжаю викторину тупых вопросов. Вот монго использует вместо привычных ID (1,2,3) строковые да. А у нее не случается такого при каких то обстоятельствах что она может обновить ID ? или он уникальный до самой смерти и его можно смело использовать на случай размещения ссылок на объект?
Nick
_id нельзя изменить
Rustam
Что подразумевается под ссылкой на объект?
️lefrotite
Чтобы добавить поле у всех докементов... Правильно ли я делаю? Раньше работало, сейчас не работает: users.update({},{'$set': {'tokens': 0}}) Python
️lefrotite
добавляет почему-то только у первого
Igor
Что подразумевается под ссылкой на объект?
Ну допустим я не особо умный и коллекция с юзерами разрастается, и хранить абсолютно все данные теперь по юзерам в коллекции Посты не вариант. Я бы хотел хранить там допустим Ник и _id на случай если мне захочется вычислить его по IP хранящийся в Коллекции Юзер. Вот я и думаю, монго же не должна так подло поступать, произвольно меня _id
Igor
Что?
db.test.update({foo: "bar"}, {$set: {test: "success!"}}, {multi: true})
️lefrotite
Понял, благодарю
Igor
Ссылаться по id - норм. Может больше подходит реляционная бд. Про ip не понял.
ip это шутка. Вопрос только по _id. Шутник из меня как кодер)
️lefrotite
Что-то он мне ошибку выбивает: TypeError: upsert must be True or False Код: users.update({},{'$set': {'tokens': 0}},{'multi':True})
Nick
{"multi" : true,"upsert" : false}
️lefrotite
То же самое
️lefrotite
Там как-то проще оно было... Но сейчас что-то не работает
Igor
Там как-то проще оно было... Но сейчас что-то не работает
Неможет быть проще, чем сетом обновить все пол яс мультиком и апсетом. Проще только отдать другому чтобы он написал. Скопируй свой код, вставь в гугл, я думаю на мультик с апсетом выведет тебя уже на второй или третьей строчке, а там глядишь и стак оверфлоу рядышком. Я бы сейчас замарочился со всей силы, но блин пол часа осталось, а *опа в мыле
️lefrotite
Вот стаки молчат. Сейчас вот так мульти записал, но всё равно апдейт только на первый документ
️lefrotite
Ладно, пойду шариться
Nick
проще только https://docs.mongodb.com/manual/reference/method/db.collection.updateMany/
Igor
Alexander
Я что-то никак вникнуть не могу в документацию. Тут выше сказали, что после find нужно не забывать exec. Верно ли я понял, после любого метода нужно один раз дописать .exec(), а потом можно штатно спамить .then() ?
Sergey
** IMPORTANT: UPGRADE PROBLEM: The data files need to be fully upgraded to version 3.4 before attempting an upgrade to 3.6; see http://dochub.mongodb.org/core/3.6-upgrade-fcv for more details.
Sergey
блин, круто, с 3.2 на 3.6 не обновиться?
Александр
обновись до 3.4, потом на 3.6
Sergey
Хреново. Это-то конечно dev-машина, но накатить на неё сейчас 3.4 не тривиально
Александр
тут без вариантов) Хотя, если на дев можно похерить базы, то можно и на 3.6 сразу)
Александр
пишут ведь что data файлы должны быть полностью обновленны, так что можно и так)
Александр
на крайний случай - можно сделать резервные копии
Sergey
уже собираю 3.4.9 )
Александр
)))
Alex
Здравствуйте, кто-нибудь может подсказать как правильно проектировать базу данных
Дима
Здравствуйте, кто-нибудь может подсказать как правильно проектировать базу данных
Можно юзать mongoose.Schema. Задаешь модель, и прописываешь типы в модели, ну и поля соответственно задаешь какие-тебе необходимы
Alex
А связи как?
Дима
А связи как?
Через ref. Ох, я сам совсем недавно разобрался только ) Вот ссылка про описание связей - http://mongoosejs.com/docs/populate.html
Дима
Вот мой рабочий пример
Дима
Post: var postSchema = Schema({ _id: Schema.Types.ObjectId, user: { type: Schema.Types.ObjectId, ref: 'User' }, title: String, text: String, rating: { type: Number, default: 0 }, created: { type: Date, default: new Date(), }, comments: [{ type: Schema.Types.ObjectId, ref: 'Comment' }] });
Дима
Comment: var commentSchema = Schema({ _id: Schema.Types.ObjectId, post: { type: Schema.Types.ObjectId, ref: 'Post' }, user: { type: Schema.Types.ObjectId, ref: 'User' }, text: String, created: { type: Date, default: new Date(), }, });
Дима
Прописывай тип ObjectId и ссылку на другую модель в ref: какая-то модель
Дима
Но ОЧЕНО важно правильно заполнять твои данные
Дима
Иначе связи не будут работать.
Дима
Вообщем почитывай немного. А если хочешь "пощупать", вот мой пример приложения по этим связям. https://github.com/doroninds/Express-News-Blog
Дима
Обрати особое внимание в роутах, где сохраняются данные
Дима
Я сегодня чуть волосы свои не вырвал пока не понял как правильно заполнять
Alex
Хорошо, спасибо)
️lefrotite
А как список в MongoDB загрузить?
️lefrotite
У меня всё не хочет хэшить
️lefrotite
TypeError: unhashable type: 'list'
️lefrotite
groups.update_one({'id':chatid},{'$set':{'admins':{list}}})
Sergey
groups.update_one({'id':chatid},{'$set':{'admins':{list}}})
groups.update_one({'id':chatid},{'$set':{'admins':[]}})
️lefrotite
Ой, точняк
️lefrotite
Спасибо
️lefrotite
знаками ошибся
Mykola
Если ли разница при декларироание поля в схеме используя mongoose ? password: {type: String}, vs password: String,
Nick
Если ли разница при декларироание поля в схеме используя mongoose ? password: {type: String}, vs password: String,
Если внимательно читать доки, то там написано что это одно и то же http://mongoosejs.com/docs/schematypes.html
SvPupok
Добрый день, камрады, помогите с синтаксисом, а то чет туплю. Надо вывести список пользователей у которых присутствует поле customData.office. Пытаю такую конструкцию: db.getUsers().forEach(function(x) {if (x.customData.office != null) {printjson(x.user)}})
SvPupok
задача просто, скриптом массово изменить описание пользователей
Анатолий
$exists: true
Анатолий
Выбери всех с этим условием и меняй
Анатолий
Это условие не использует индекс 🙂