
Andrey
23.08.2018
11:22:40
Всем привет. Есть база данных base1. Нужно ее склонировать в рамках одного mongod instance в новую базу. Я правильно понял, мои действия запустить db.copyDatabase("base1","base1new") ? Или лучше использовать db.cloneDatabase? Что быстрее и безопаснее. База порядка 500Гб.


yopp
23.08.2018
12:49:21
Всем привет. Есть база данных base1. Нужно ее склонировать в рамках одного mongod instance в новую базу. Я правильно понял, мои действия запустить db.copyDatabase("base1","base1new") ? Или лучше использовать db.cloneDatabase? Что быстрее и безопаснее. База порядка 500Гб.
Если вы можете остановить монгу на время, то самый быстрый способ через копирование файлов хранилища. Составляете список, создаёте новую базу, в ней пустые коллекции, через collStat составляете список файлов, останавливаете монгу и заменяете файлы новых коллекций копией файлов оригинальных коллекций.
Второй вариант mongodump и mongorestore. Запускаете на другом порту и через pipe делаете копию.
Если вы не можете остановить монгу и в базу продолжается запись, то у вас будут проблемы и в общем виде задачу будет очень сложно решить. Так как copy и clone во-первых не point-in-time а значит данные будут неконсистентные, во-вторых они ещё и блокируют операции с базой, что может привести к отказу в обслуживании


Andrey
23.08.2018
12:55:35
Если я остановлю все что пишет в бд и запущу db.copydatabase это насколько долгий процесс? Допустим на 500гб? Или все зависит по ресурсам?

yopp
23.08.2018
12:57:49
Зависит от ресурсов, да. Но будет долго

Google

yopp
23.08.2018
12:57:54
Долго == часы
Если у вас НЖМД может и сутки

Andrey
23.08.2018
13:05:41
а есть способ проверить что в базу уже никто ничего не пишет? чтобы убедиться что можно копирование начинать. Сам только начал знакомится с монго

yopp
23.08.2018
13:06:51
отобрать у всех пользователей права на запись

Vova
23.08.2018
13:34:30
И в каких-то прекрасных апках без try..catch всё ляжет при попытке записи?

Constantin
23.08.2018
13:39:49

Gleb
23.08.2018
13:42:22

Constantin
23.08.2018
13:46:59

Gleb
23.08.2018
13:47:48
ну ок согласен, я просто испытваю некую боль тк был знаком с разработчиками у которых софт просто в эксепшен падал навсегда

Constantin
23.08.2018
13:49:12

??M1noR??︻┳ั芫ี┳═─┵ ??
23.08.2018
15:28:32
Salom xamaga

S̶m̶°̶O̶k̶™?✔️
23.08.2018
15:30:27
salam voram

LocSg
23.08.2018
15:30:35

Google

ABC
23.08.2018
19:41:27
Всем доброй ночи.
Вопрос.
Монго/Монгуз. Есть модель
const jobSchema = new mongoose.Schema ({
name: String,
result: {}
})
На определенном этапе в result прилетает ключ tweets который является массивом. Как после этого обновлять массив?
Как сделать unshift result.tweets в такой модели?

Constantin
23.08.2018
19:43:34
Посмотрите на команду $pull, но вам нужен будет какой-то уникальный идентификатор внутри result.tweeets, чтобы делать это без костылей.

ABC
23.08.2018
19:45:21
пулл же для удаления

Constantin
23.08.2018
19:45:49
Тогда вам нужен $push

ABC
23.08.2018
19:46:29
проблема в том что массив внутри объекта. я не доганаю как быть в таком случае? я знаю есть $push и тд. но как применить если массив внутри объекта?

Constantin
23.08.2018
19:47:27
Просто в ключе полный путь укажите:
$push: { 'result.tweets': newTweet }
Чтобы сделать unshift, нужно вроде $position в 0:
$push: { 'result.tweets': { $position: 0, $each: [newTweet] } }

ABC
23.08.2018
19:49:29
точно отработало! спасибо. а то я нестил по другому. еще вопрос, $unshift же тоже есть? а то $push в конец добавляет, а надо в началао

Constantin
23.08.2018
19:50:51

ABC
23.08.2018
19:52:24
спс попробую осилить
а можно в массив добавить сразу 2 объекта? он что по одному добавляет?
как-то кажется неправильно дергать 2 раза бд

Constantin
23.08.2018
19:53:34

ABC
23.08.2018
20:01:17
+++ вам также!
уже что-то. это работает.
const update = await Job.findOneAndUpdate({name: jobName}, {$push: {"result.tweets": {$each: [...difference]}}}, {new: true})
теперь догнать бы как в начало пушить а не в конец
для эого надо sort и слайс?

Constantin
23.08.2018
20:03:41
$position

ABC
23.08.2018
20:05:07
точно увидел. прошу прощеняи пропустл. видимо тоже сплю уже

Google

ABC
23.08.2018
20:09:03
все работает как надо, спасибо еще раз!

Vova
23.08.2018
20:30:25
А как одним словом назвать всё это: $push $set $pull $position? хочу почитать об этом

ABC
23.08.2018
20:34:57
тремя
Array Update Operators
https://docs.mongodb.com/manual/reference/operator/update-array/

Andrey
24.08.2018
04:41:42
Доброе утро. Как можно выявлять битые коллекции и почему они возникают?

AstraSerg
24.08.2018
04:43:09
Доброе. Битые коллекции? Что за зверь?

??M1noR??︻┳ั芫ี┳═─┵ ??
24.08.2018
06:10:20
Kmsan õzi

Andrey
24.08.2018
06:54:18
Доброе. Битые коллекции? Что за зверь?
при копировании базы выпадает такое сообщение
1s2:PRIMARY> db.copyDatabase("pro","rg")
{
"errmsg" : "exception: BSONElement: bad type 41",
"code" : 10320,
"ok" : 0
}

[Anonymous]
24.08.2018
06:59:34
hi

AstraSerg
24.08.2018
07:00:52
it is not simple, it is VERY simple :)

AstraSerg
24.08.2018
07:03:01
here it is https://docs.mongodb.com/manual/tutorial/deploy-replica-set/
It is not very well when you learn only by example. You must read the documentation at least from time to time.

Admin
ERROR: S client not available

Andrey
24.08.2018
07:59:14

[Anonymous]
24.08.2018
07:59:28
done
thankyou @AstraSerg ?

AstraSerg
24.08.2018
08:03:41

Google

Andrey
24.08.2018
09:01:59


Davydov
24.08.2018
09:02:27
день добрый, что-то туплю, и гугл не подсказывает где... есть колекция с несколькими миллионами записей, если я делаю через консольного клиентав ней запрос:
db.mycol.find(myfilter).sort({_id:-1}).limit(1);
отрабатывает моментально и выдает результат, пытаюсь сделать тоже самое через nodejs, вытягивает из курсора данные около полуминуты... с чем то может быть связано?
такс, пардон, похоже где-то не там я затупил, посносил весь лишний код, заработало...

MVP
24.08.2018
09:16:17
Подскажите в какую сторону копать - пишем простые данные по загрузке системы каждую минуту в монго. есть же какие то аггрегирующие функции ? Чтобы на стороне базы проводить усреднения ?

??M1noR??︻┳ั芫ี┳═─┵ ??
24.08.2018
09:26:33
Qoloyslor ey

Davydov
24.08.2018
09:34:43
причина была в том, что parseInt на число в фильтре не сделал, которое пришло в виде строки...

AstraSerg
24.08.2018
10:21:21
Andrey
> мне получается нужно найти и починить коллекцию или индекс.
нет, вам нужно починить БД


CFFTRP
24.08.2018
10:40:12
Привет, подскажите, как решить
Mongoose 5.x disallows passing a spread of operators to Model.aggregate(). Instead of Model.aggregate({ $match }, { $skip }), do Model.aggregate([{ $match }, { $skip }])", name: "MongooseError" }
При этом, всё по доке вроде сделано:
.aggregate([
{ $match: { userId } },
{
$addFields: {
campaigns: {
$filter: {
input: '$campaigns',
as: 'campaign',
cond: { $eq: ['$$campaign.isActive', true] }
}
}
}
},
{
$project: {
campaigns: {
_id: 1,
targeting: 1,
position: 1,
type: 1,
// date: 1,
// name: 1,
},
widget: 1
}
}])
.exec()

yopp
24.08.2018
10:48:51

Andrey
24.08.2018
10:51:11

AstraSerg
24.08.2018
10:52:55

yopp
24.08.2018
10:53:36

AstraSerg
24.08.2018
10:53:50

Andrey
24.08.2018
10:54:19
это типа намек, что 2.4 ансаппортед?

yopp
24.08.2018
10:54:41

AstraSerg
24.08.2018
10:55:03

yopp
24.08.2018
10:55:07
не, я серьёзно
У меня до недавнего времени вообще 1.0.х крутилась для личных нужд