yopp
Одним можно сразу обойтись
Maksim
хм
Maksim
сейчас попробую. Спасибо
yopp
https://docs.mongodb.com/manual/aggregation/
yopp
Что получилось не так?
Maksim
{
"_id" : {
"moid" : "int",
"method" : "string"
},
"count" : 30260.0
}
Maksim
вот такая загагулина вышла.
Maksim
Что получилось не так?
я пытаюсь понять, можно ли получить на выходе такое
{
"_id" : [
NumberInt(17162)
],
"method" : [
{
"lldp" : 10
},
{
"description" : 2
}
]
}
yopp
Это очень плохая идея
Maksim
понял ) пойду тогда дальше писать код для решения этой задачи
yopp
Лучше не делать схему с динамическими именами атрибутов.
Maksim
я с базами на вы к сожалению.
yopp
Можно {_id: XYZ, methods: [{method: FOO, count: BAR}...]}
yopp
Или name/count
SvPupok
камрады, а будет ли корректно работать монга 3.2 и 3.4 в рамках одного репликасета? а то есть задача по обновлению версий, но с downtime пока не получается договориться.
tenni
SvPupok
Версия исходного репликасета 3.2, надо обновиться до 3.4 желательно без остановки
yopp
yopp
https://docs.mongodb.com/manual/release-notes/3.4-upgrade-replica-set/
SvPupok
ага, спс, я читал эту статью, но мы кроме всего прочего просто меняем еще и машины в репликасете, с квеличением диска и памяти.
yopp
Это не важно.
yopp
Проверьте что у вас хватает оплога
SvPupok
ну при текущих операциях на пару часов хватит.
yopp
Мало.
yopp
А сколько нод с данными?
SvPupok
3
yopp
Если просто апгрейд то не важно должно быть, если перенос то надо смотреть чтоб нода потом смогла догнать мастера.
SvPupok
у нас там проблема больше архитектурная, репликасет состоит из 3х нод, арбитров нет. Совместно с монгой, на паре нод еще и постгрес крутится, поэтому первоочередная задача, разнести базы по разным машинам, плюс апгрейд с версии 3.2 до версии 3.4.
yopp
Сначала разнести, потом апгрейдить.
yopp
Остановите одну ноду, сделайте копию dbpath, копию залейте на новое железо, там поднимите новую ноду на той-же версии что остальные.
yopp
Когда убедитесь что на новом железе всё хорошо, начните обновляйся. Когда убедитесь что после обновления всё хорошо, выведите старые ноды из эксплуатации.
Driver
добрый день. не подскажете когда обновят репу для xenial версии 3.4? а то там истек срок подписи пакетов
yopp
Заведите тикет в jira: https://jira.mongodb.org
yopp
Если это репозиторий указанный в официальной документации. Если это сторонний репозиторий, ищите владельцев.
Aleksey
они опять да ?
yopp
У них с этим плохо вообще :(
Aleksey
чот у парней из монги с пакетами 3 раза в год стабильно пролеты
Driver
офрепа из доков да
Aleksey
ну по тикету чинят как правило да
Aleksey
дня за два
yopp
Напиши бота который им в жиру будет автоматом постить что репо сломалось 😭
Driver
окей, ясно. там с этой же подписью и дебиан репа
yopp
Ну напиши тикет, поправят. Можешь через гугл транслейт :)
Aleksey
Igor
Чет не могу найти как написать чтобы монга давала доступ к БД через логин и пароль
Анатолий
https://docs.mongodb.com/manual/tutorial/enable-authentication/
Дима
Добрый день. Помогите плиз с траблой. Есть две схемы Post и Comment. Я хочу связать их так - через Post добратся к комментариям. Вот как выглядят модели: var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var commentSchema = new Schema({
_id: Schema.Types.ObjectId,
_post: { type: Schema.Types.ObjectId, ref: 'Post' },
text: String,
created: {
type: Date,
default: new Date(),
},
});
module.exports = mongoose.model('Comment', commentSchema);
Дима
Post: var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var postSchema = new Schema({
_id: Schema.Types.ObjectId,
title: String,
text: String,
rating: {
type: Number,
default: 0
},
created: {
type: Date,
default: new Date(),
},
comments: [{ type: Schema.Types.ObjectId, ref: 'Comment' }],
});
module.exports = mongoose.model('Post', postSchema);
Дима
По логике в свойстве comments должны появляться комментарии, но массив пуст при добавлении нового комментария
Дима
Post.findById(id).populate('comments').exec();
Дима
Сам комментарий успешно добавляется: Post.findById(id, (err, post) => {
var comment = new Comment({
_id: new mongoose.Types.ObjectId(),
text: req.body.comment,
_post: post._id,
});
comment.save( () => {
res.redirect('/posts/' + post._id);
});
});
Дима
Можете подсказать в чем может быть проблема? Заранее спасибо.
Nick
а кто будет добавлять идшники в массив comments за вас?
Nick
вы точно уверены что монгус сделает это за вас?
Дима
эх, точно
Дима
а я то думал почему обратно все работает
Дима
[ { _id: 5a5c583de6ef7321ac14e72b,
text: 'hehth',
post:
{ _id: 5a5c580df8420e21651f0d24,
title: 'Еще одна статья',
text: 'dsavsdvasdvs',
__v: 0,
comments: [],
created: 2018-01-15T07:28:05.181Z,
rating: 0 },
__v: 0,
created: 2018-01-15T07:28:58.512Z } ]
Дима
а кто будет добавлять идшники в массив comments за вас?
Делаю так, но все равно массив пуст: 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,
});
Post.findByIdAndUpdate(id, {
comments: comment._id,
});
comment.save( (err, comment) => {
console.log(comment);
res.redirect('/posts/' + post._id);
});
Nick
а comments это массив, а не один элемент, соответвенно используйте методы работы с массивами
Nick
и вы уверены что findByIdAndUpdate корректно найдет ваш пост по var id = req.params.id;?
Дима
Это точно var id = req.params.id т.к. ref для комментариев уже работает
Дима
Т.е если найти комментарий, и вызвать populate('post') то в свойстве post у комментария добавляется информация о этом посте.
Дима
[ { _id: 5a5c583de6ef7321ac14e72b,
text: 'hehth',
post:
{ _id: 5a5c580df8420e21651f0d24,
title: 'Еще одна статья',
text: 'dsavsdvasdvs',
__v: 0,
comments: [],
created: 2018-01-15T07:28:05.181Z,
rating: 0 },
__v: 0,
created: 2018-01-15T07:28:58.512Z } ]
Nick
Не знаю есть ли монгусе такие фичи, но апдейтить comments придется
Дима
Новый пост создаю так: router.post('/create', (req, res, next) => {
mongoose.connect(db.url);
var post = new Post({
_id: new mongoose.Types.ObjectId(),
title: req.body.title,
text: req.body.text,
comments: [],
});
post.save( () => {
res.redirect('/posts/' + post._id);
})
});
Дима
Я добавил еще свойство comments как пустой массив
Дима
Комментарий создается так: 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(() => {
Post.findByIdAndUpdate(id, {
comments: [{comment}],
});
res.redirect('/posts/' + post._id);
});
});
Дима
Я так и не понимаю почему же массив пустой приходит после добавления комментария
Slava
И все так будет прздник на улице драйверов,
https://engineering.mongodb.com/post/considering-the-community-effects-of-introducing-an-official-golang-mongodb-driver
Дима
Я так и не понимаю почему же массив пустой приходит после добавления комментария
Пытаюсь так но снова ничего: 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();
Post.update({_id: id}, { $push: { comments: comment } });
res.redirect('/posts/' + post._id);
});
Nick
это уже ближе к правде
Дима
Помогите плиз, почти уже готово. Я понимаю что из коментария теперь можно вытягивать ref поста, но мне надо получить КОЛЛЕЦИЮ комментариев в посте по id
Дима
Проку от того что в комменте инфа из поста не много
Nick
добавьте _id вместо целого коммента
Nick
а await случаем не пропущен?