Дима
Дима
все
Дима
корень проблемы был в другом
Дима
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
Nick
Iliya
Дима
Дима
Есть еще такой вопрос. Я "вытягиваю" автора и комментарии для текущего поста: 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
️lefrotite
Igor
Что?
db.test.update({foo: "bar"}, {$set: {test: "success!"}}, {multi: true})
️lefrotite
Понял, благодарю
Rustam
Igor
️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
️lefrotite
Alexander
Я что-то никак вникнуть не могу в документацию. Тут выше сказали, что после find нужно не забывать exec. Верно ли я понял, после любого метода нужно один раз дописать .exec(), а потом можно штатно спамить .then() ?
Igor
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
Здравствуйте, кто-нибудь может подсказать как правильно проектировать базу данных
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
️lefrotite
Ой, точняк
️lefrotite
Спасибо
️lefrotite
знаками ошибся
Mykola
Если ли разница при декларироание поля в схеме используя mongoose ? password: {type: String}, vs password: String,
Nick
SvPupok
Добрый день, камрады, помогите с синтаксисом, а то чет туплю.
Надо вывести список пользователей у которых присутствует поле customData.office.
Пытаю такую конструкцию: db.getUsers().forEach(function(x) {if (x.customData.office != null) {printjson(x.user)}})
SvPupok
задача просто, скриптом массово изменить описание пользователей
Анатолий
$exists: true
Анатолий
Выбери всех с этим условием и меняй
Анатолий
Это условие не использует индекс 🙂