@MongoDBRussian

Страница 307 из 342
Bro
19.09.2018
08:48:26
хм что-то туплю

$nin and $ne queries cannot be answered by indexes, and force collection scans. If you need to use these ensure you are filtering down using indexes as much as possible and leaving the $nin and $ne terms to the very last part of the query selector.

действительно так?

селекты по 100м коллекции с $ne занимают несколько миинут

Google
Bro
19.09.2018
08:49:21
эксплэйн показывает что идет сканирование коллекции

Yaroslav
19.09.2018
08:53:33
Теоретически можно добавить 3.4 к 4.0, но зачем? Обновите. Тем более, если хотите добавить, значит данных там нет.
нет просто на проде версия 3.4 . было принято решение обновить версию и сделать реплика сет. Я думал сделать down time . снять бэкап . развернуть реплика сет и накатить бэкап и потом запустить все . но мне сказали что такое не кто не даст сделать )) Вот и пытаюсь понять и придумать что в таком случае мне делать

Точнее я хз как такие ситуации разруливаются и какие есть бест практис

AstraSerg
19.09.2018
08:55:28
Точнее я хз как такие ситуации разруливаются и какие есть бест практис
Прежде всего разделите эти 2 шага: сначал обновите, а потом репликасет сделаете простым добавлением нод к этой

AstraSerg
19.09.2018
09:06:05
но такая остановка займёт значительно меньше времени, чем по вашему плану

селекты по 100м коллекции с $ne занимают несколько миинут
так а не получается сделать фильтр на предыдущем стейдже?

Bro
19.09.2018
09:12:13
просто .find().sort().limit() нет аггрегации

AstraSerg
19.09.2018
09:13:46
просто .find().sort().limit() нет аггрегации
Может имеет смысле перейти на агрегацию? Случаи конечно разные есть, но в некоторых - это оправдано

Bro
19.09.2018
09:14:18
я могу ошибаться но мне кажется аггрегация будет работать точно так же

просто вместо find() будте {$match: {...}}

Google
Bro
19.09.2018
09:14:34
ну и тд

AstraSerg
19.09.2018
09:15:06
я могу ошибаться но мне кажется аггрегация будет работать точно так же
не исключено. Суть не втом что бы просто перейти на агрегация, а втом что она позволит вам модифицировать запрос

Bro
19.09.2018
09:15:17
там 100м документов где-то есть поле removed: True но в большей части этого флага нет

и селект документов где 'removed': {'$ne': True}

может Sparse index попробовать

only contain entries for documents that have the indexed field, even if the index field contains a null value. The index skips over any document that is missing the indexed field. The index is “sparse” because it does not include all documents of a collection.

AstraSerg
19.09.2018
09:21:31
там 100м документов где-то есть поле removed: True но в большей части этого флага нет
вот тут можно как раз и оптимизировать: сначала, на первом стейдже отбросьте доки где removed: true, а потом остальное

может Sparse index попробовать
да, конечно, он как раз для таких случаев

Bro
19.09.2018
09:22:02
отбросить доки где removed: true это и будет 'removed': {'$ne': True}

Nick
19.09.2018
09:23:25
а можно попродробнее почему нельзя просто взят ьи искать по eq: false?

AstraSerg
19.09.2018
09:24:35
yopp
19.09.2018
09:24:39
здравствуйте, Товарищи монговоды ! есть инстанс монги версия 3.4 есть реплика сет 4.0 Могу ли я добавить инстанс монги в реплика сет и назначить этот инстанс primary нодой без остановки этого инстанса и реплика сета, на горячую короче ?
Нет. Во-первых внутри кластера могут быть только соседние минорные версии (с 4.0 только 3.6) Во-вторых, если на ноде уже существуют данные то они не будут «смержены» с кластером

Bro
19.09.2018
09:25:32
В большей части документов

Nick
19.09.2018
09:25:48
а индекс по полю есть?

AstraSerg
19.09.2018
09:25:54
Потому что этого поля нет.
может просто проверить $exist ?

Bro
19.09.2018
09:25:54
Есть

Nick
19.09.2018
09:26:00
он не спаршенный?

sparse

Bro
19.09.2018
09:26:09
Нет

Google
Bro
19.09.2018
09:26:20
Я вот думаю сделать спаршеный

Nick
19.09.2018
09:29:04
тогда попробуйте как и сказали выше $exists: false

Yaroslav
19.09.2018
09:33:40
но такая остановка займёт значительно меньше времени, чем по вашему плану
да думаю так и сделаю : сначало обновлю версию монги , потом прицеплю к ней реплики . осталось разобраться только как в реалиях кубере это все осуществить , спасибо !

AstraSerg
19.09.2018
09:42:26
да думаю так и сделаю : сначало обновлю версию монги , потом прицеплю к ней реплики . осталось разобраться только как в реалиях кубере это все осуществить , спасибо !
и это правильно. Тем более, что @dd_bb говорит, что только соседние версии поддерживаются, а у вас пред-предыдущая (3.6 ещё была)

Yaroslav
19.09.2018
09:45:16
и это правильно. Тем более, что @dd_bb говорит, что только соседние версии поддерживаются, а у вас пред-предыдущая (3.6 ещё была)
ага , вот только моги ли я просто обновить версию монги и указать старый db/path ? Данные не повредется из за этого ? или надо снимать дампы и раскатывать ?

Bro
19.09.2018
09:53:53
Я бы сделал бэкап

На всякий случай

AstraSerg
19.09.2018
09:58:01
ага , вот только моги ли я просто обновить версию монги и указать старый db/path ? Данные не повредется из за этого ? или надо снимать дампы и раскатывать ?
бакап конечно нужен, данные повредится не должны, просто следуйте инструкциям обновлениея: https://docs.mongodb.com/manual/release-notes/3.6-upgrade-standalone/

p4sh
19.09.2018
14:02:53
Допустим я аггрегировал две коллекции: db.issue.aggregate([{ $lookup: { from: "renter", localField: "org", foreignField: "org", as: "company" } }]); На выходе: { "_id" : ObjectId("5ba24958103b0ac162148f6f"), "name" : "Иванов Иван Иваныч", "floor" : 3, "org" : 2, "cardNo" : 34443, "dateIn" : 20180919, "dateOut" : 20190920, "company" : [ { "_id" : ObjectId("5ba24a53103b0ac162148f71"), "company" : "Sun", "floor" : 3, "org" : 2 } ] }Как теперь к этому объекту обратиться?

ЭЭЭ) прям тупняк

ровно как и вопрос наверн, сейчас переформулирую

Я хочу чтобы на выхлопе у меня было { "_id" : ObjectId("5ba24958103b0ac162148f6f"), "name" : "Иванов Иван Иваныч", "floor" : 3, "org" : "Sun", "cardNo" : 34443, "dateIn" : 20180919, "dateOut" : 20190920 }Как будто я сделал JOIN Потом, все это дело в JSON отдал бы фронтенд разработчику (опять же себе?? ) Реально? или я дофига хочу

> db.renter.find(); { "_id" : ObjectId("5ba24a44103b0ac162148f70"), "company" : "Microsoft", "floor" : 2, "org" : 1 } { "_id" : ObjectId("5ba24a53103b0ac162148f71"), "company" : "Sun", "floor" : 3, "org" : 2 } > db.issue.find(); { "_id" : ObjectId("5ba24958103b0ac162148f6f"), "name" : "Иванов Иван Иваныч", "floor" : 3, "org" : 2, "cardNo" : 34443, "dateIn" : 20180919, "dateOut" : 20190920 }

p4sh
19.09.2018
14:12:49
это был набор букв для меня, но я разберусь)

https://docs.mongodb.com/manual/reference/operator/aggregation/project/

это?)

AstraSerg
19.09.2018
14:13:32
это?)
это

Google
p4sh
19.09.2018
14:13:49
Спасибо)

AstraSerg
19.09.2018
14:13:54
ща набросаю...

Типа такого: {$project: {name: 1, floor: 1, cardNo: 1,dateIn: 1, dateOut:1, org: '$company[0].company'}} Это добавьте как следующий стейдж после лукап

Peter
19.09.2018
15:53:28
как покдлючиться к базе если в ссылке +srv через studio 3t?

Fozilbek
19.09.2018
16:43:30
правда $company[0].company' не работает(
А если вот "$company.0.company"

p4sh
19.09.2018
16:45:21
А если вот "$company.0.company"
{ "_id" : ObjectId("5ba24958103b0ac162148f6f"), "name" : "Иванов Иван Иваныч", "floor" : 3, "cardNo" : 34443, "org" : [ ] }

пустой список

Fozilbek
19.09.2018
16:48:37
пустой список
db.users.aggregate([ { $project: { name: 1, first: { $arrayElemAt: [ "$favorites", 0 ] }, last: { $arrayElemAt: [ "$favorites", -1 ] } } } ])

На вашом случай $favorites это company

p4sh
19.09.2018
16:50:16
понял, спс то есть обращение также, через список, попробую

p4sh
19.09.2018
17:04:17
Я добил

db.guest.aggregate([ { $lookup: { from: "rent", localField: "org", foreignField: "org", as: "company" } }, { $project: { name: 1, floor: 1, cardNo: 1, org: "$company.company" } } ]).pretty();

AstraSerg
19.09.2018
17:57:00
Но обратите внимание, что если отношение issue.org к renter.org не один к одному, то нужно использовать еще и $unwind

p4sh
19.09.2018
18:01:50
Отлично, поздравляю!
Смущает только что возвращается список org: [ “sun”], ноооо, думаю потом это можно обыграть

Google
AstraSerg
19.09.2018
18:40:11
p4sh
19.09.2018
18:41:15
Это потому что вы берете $company.company вместо $company.0.company
При таком запросе - возвращает пустой список(

AstraSerg
19.09.2018
18:43:55
При таком запросе - возвращает пустой список(
Так, покажите еще раз пример документа, сразу после лукап, без проджекта

В прошлый раз вы говорили что в нем company - это список документов

Нулевой элемент этого списка - это отдельный документ, одним из ключе которого является company

А value этого ключа, как раз нужное вам название, Sun

p4sh
19.09.2018
18:53:13
{ "_id" : ObjectId("5ba24958103b0ac162148f6f"), "name" : "Иванов Иван Иваныч", "floor" : 3, "org" : 2, "cardNo" : 34443, "dateIn" : 20180919, "dateOut" : 20190920, "company" : [ { "_id" : ObjectId("5ba24a53103b0ac162148f71"), "company" : "Sun", "floor" : 3, "org" : 2 } ] }

Если делаю с нулём:

> db.guest.aggregate([ ... { ... $lookup: { ... from: "rent", ... localField: "org", ... foreignField: "org", ... as: "company"... } ... }, ... { ... $project: { ... name: 1, ... floor: 1, ... cardNo: 1, ... org: "$company.0.company", ... dateIn: 1, ... dateout: 1... } ... } ... ]).pretty(); { "_id" : ObjectId("5ba24958103b0ac162148f6f"), "name" : "Иванов Иван Иваныч", "floor" : 3, "cardNo" : 34443, "dateIn" : 20180919, "org" : [ ] }

AstraSerg
19.09.2018
18:57:35
Вот жеж!.. А если только $company[0] без окончания?

p4sh
19.09.2018
18:58:45
Тож)))

И {$company,0}, как в документации

AstraSerg
19.09.2018
19:01:04
Тож)))
Тож пустой?

p4sh
19.09.2018
19:02:01
Тож пустой?
> db.guest.aggregate([ ... { ... $lookup: { ... from: "rent", ... localField: "org", ... foreignField: "org",... as: "company" ... } ... }, ... { ... $project: { ... name: 1, ... floor: 1, ... cardNo: 1, ... org: "$company[0]", ... dateIn: 1,... dateout: 1 ... } ... } ... ]).pretty(); { "_id" : ObjectId("5ba24958103b0ac162148f6f"), "name" : "Иванов Иван Иваныч", "floor" : 3, "cardNo" : 34443, "dateIn" : 20180919 }>

вообще пусто

AstraSerg
19.09.2018
19:03:30
Куда org делся?

p4sh
19.09.2018
19:04:10
Куда org делся?
Он просто не выводится

AstraSerg
19.09.2018
19:05:02
Ну ладно, а если вообще без индекса, просто $company

p4sh
19.09.2018
19:07:09
Тогда выводится полный словарь (в списке)

Страница 307 из 342