
Constantin
30.07.2018
15:50:51
Есть еще грязный способ, остановить базу в спокойном режиме, если такая возможность есть.
Скопировать или перенести файлы базы, запустить на новом инстансе, но нужно понимать, что между разными системами и версиями монги такой трюк не сработает.

Phoenix»
30.07.2018
15:53:34

Banschikov
30.07.2018
15:56:59
А инстанс выключен или нет?
Инстанс с которого будет происходить копирование будет включен. Сейчас почитаю про этот инструмент. попробуем его .Спасибо. Грязный способ что то не охото делать

Google

Constantin
30.07.2018
16:06:59
насколько я знаю mongodump по-умолчанию роли и юзеров не собирает, нужно использовать флаг, который я скинул выше

Banschikov
30.07.2018
16:09:12

Constantin
30.07.2018
16:09:50
Ну вполне может быть, я просто снимаю обычно с конкретной БД

Phoenix»
30.07.2018
16:10:32
Вообще не понял, что вы хотите сделать
в папке и ее подпапках - текстовые файлы.
На каждую строку файла нужно делать запись в бд. Так из всех файлов все данные должны перенестись в бд
Мне инетересно как это можно сделать максимально быстро

Banschikov
30.07.2018
16:11:21

Constantin
30.07.2018
16:14:02


Phoenix»
30.07.2018
16:23:03


Constantin
30.07.2018
16:35:40
спасибо, но наверное это немного не то
сейчас построчное чтение, да и нужно через монгус
Если порядок создаваемых документов не важен, что-то такое:
const mongoose = require('mongoose');
const readdir = require('fs').readdirSync;
const files = readdir(PATH_TO_DIR);
const promisses = [];
for (const file of files) {
if (file.slice(-3) !== '.txt') continue;
const rows = file.split('\n');
for (const row of rows) {
if (!row) continue;
promisses.push(
mongoose.models.ExampleClient.create({
name: row
})
);
}
}
Promise.all(promisses).
then(() => {
console.info('Done!');
});
Нужно только добавить рекурсивное чтение поддиректорий


Sergey
30.07.2018
20:48:33
Кто-нибудь использовал mongodb вместе с Django?

Irina
30.07.2018
21:07:05
Привет. Помогите, пожалуйста, с агрегацией.
Есть примерно вот такая коллекция, мне нужно получить имя пользователя и только ту часть массива battles, которая соотвествует условию date: { $gte: sundayBattle}
[{
t_name:"Username",
battles: [
{exp:20,
date:2018-07-26 01:00:00.000
},
{exp:20,
date:2018-07-27 15:00:00.000
}
]
},
{}]

Google

Bro
30.07.2018
21:39:04
а где там аггрегация

Irina
30.07.2018
21:39:50

Bro
30.07.2018
21:40:17
да
только хотел написать
$elemMatch юзай
в аггрегации тоже можно
ну так сделай $unwind
$unwind потом отсекаешь что по суловиям не катит потом груп
$unwind -> $match -> $group (по юзеру)

Irina
30.07.2018
21:52:03
$unwind -> $match -> $group (по юзеру)
так?)
Warrior.aggregate([
{$match:{squad: msg.chat.title}},
{$unwind: "$battles"},
{$match:{battles:{$elemMatch: { date: { $gte: sunday}}}}},
{$group:{user:'$cw_name', battles:'$battles'}}
])

Bro
30.07.2018
21:53:57
не
$elemMatch тебе не нужен

Irina
30.07.2018
21:54:51
сложновато
$elemMatch юзай
$elemMatch тебе не нужен

Bro
30.07.2018
21:55:07
ну если ты анвинд сделал то не нужен
элем матч просто по массиву итерируется
а ты его развернул

Irina
30.07.2018
21:56:04
так оставить battles.date: { $gte: sunday}?

Google

Bro
30.07.2018
21:56:39
т.е. просто тупо $match: {$gte: sundayBattle}
да
шаришь
ну и потом груп делай и проекцию и собирай как надо

Irina
30.07.2018
21:57:34
так вроде понятней, спасибо

Bro
30.07.2018
22:00:13
пожалуйста. в начале немного не въехал что там нужно было.

Irina
30.07.2018
22:00:42

Bro
30.07.2018
22:02:32
"battles.date": {"$gte": ....} вроде так
$match: {"battles.date": {"$gte": ....}}
только без кавычек если в консоли монго или js

Irina
30.07.2018
22:05:25
ну и с $group в этой ситуации не очень ясно
{$group:{user:'$cw_name', battles:'$battles'}} - так нельзя написать
в общем реально проще просто все отфильтровать уже на сервере

Bro
30.07.2018
22:08:53
эм?
ну канешно нельзя
группируешь ты по чему-то
что является ключем
$group: {_id: "$t_name", ....}
а баттлз засовываешь в список
типа будет что-то вроде $group: {_id: "$t_name", sunday_battles: {$push: "$battles"}}
ну и получается ключ один а для этого ключа (юзера) баттлов много и их нужно засунуть в какой-то контейнер (array)

Google

Bro
30.07.2018
22:13:19
т.е. $push или $addToSet
а баттлы уже отфильтрованы по дате
на предыдущем стэйдже пайплайна

Irina
30.07.2018
22:14:38
вернулся пустой массив в итоге
я сдаюсь

Bro
30.07.2018
22:15:08
ну сразу никогда не получается
нужно попробовать то се
мне не видно че там у тебя поэтому сложно советы давать

Irina
30.07.2018
22:16:03
юзеров если что много

Bro
30.07.2018
22:16:15
посмотри на этапе $match все верно? а потом след стэйдж пайплайна смотри
ну понятно что много у тебя в итоге будет список юзерв с баттлами для каждого

Irina
30.07.2018
22:20:17
Warrior.aggregate([
{$match:{squad: msg.chat.title}},
{$unwind: "$battles"},
{$match:{'battles.date': { $gte: sundayBattle}}},
{$group:{_id:'$t_name', week_battles:{$push:'$battles'}}}
])
в итоге так код выглядит

Bro
30.07.2018
22:20:50
ну что-то вроде
работает?

Irina
30.07.2018
22:20:56
неа

Bro
30.07.2018
22:21:36
ну убирай потихоньку этапы пайплайна
$match:{squad: msg.chat.title}} - возвращает результаты?
msg.chat.title - вместо этого попробуй просто название. это я так понимаю сразу в коде где-то

Irina
30.07.2018
22:22:57

Google

Bro
30.07.2018
22:23:12
$unwind разворачивает как надо?
что после анвинда получается?

Irina
30.07.2018
22:25:35
фигня какая-то получается
как будто всю схему вообще выводит
Юзеры дублируются много раз

Bro
30.07.2018
22:27:39
ну он разворачивает т.е. у тебя было {_id: 1, lst: [1, 2, 3]} а если сделать $unwind: "$lst" будет {_id: 1, lst: 1}, {_id: 1, lst: 2}, {_id: 1, lst: 3}
battles разворачивается потом ты его фильтруешь
{$match:{'battles.date': { $gte: sundayBattle}}},
это работает?

Irina
30.07.2018
22:29:01
ага
на этом этапе пустой массив приходит

Bro
30.07.2018
22:31:04
Warrior.aggregate([
{$match:{squad: msg.chat.title}},
{$unwind: "$battles"},
{$group:{_id:'$t_name', count:{$sum:1}}}
])
попробуй такое будет работать
может у тебя просто нет записей которые условию удовлетворяют

Irina
30.07.2018
22:31:39
записи точно есть
попробую
MongoError: unknown group operator '$inc'