@MongoDBRussian

Страница 308 из 342
AstraSerg
19.09.2018
19:08:38
Список со словерем внутри?

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

Google
AstraSerg
19.09.2018
19:14:13
Так, а попробуйте сменить as: company на as: comp в лукапе

Тут https://docs.mongodb.com/manual/reference/operator/aggregation/project/#include-specific-fields-from-embedded-documents пишут, что из списка возвращается список :( тогда просто добавьте ещё один стейдж: {$unwind: "org"}

p4sh
19.09.2018
19:27:53
Вы гений !)

А я мучал $company всякими forEach :D

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

куда уж мне, админу) ну ниче ;) осилит дорогу идущий

Жму руку - спасибо за наставления

AstraSerg
20.09.2018
04:50:23
Польщен, спасибо :) я и сам недопрограммер, недоадмин... Просто монгой решил заняться, вот и чухаю потихоньку.

Буду премного благодарен еще сам погляжу сейчас
BTW еще одна БД здесь https://university.mongodb.com/static/MongoDB_2018_M101P_August/handouts/final7__f7_m101_52e000fde2d423744501d031.zip Импортировать mongoimport --db test --collection images images.json mongoimport --db test --collection albums albums.json Описание: The database consists of two collections, albums, and images. Every image is supposed to be in an album, but there are orphan images that appear in no album.

AstraSerg
20.09.2018
05:09:33
хахах))) значит я не одинок!) за базу - отдельное спасибо!
Конечно! Думаете, все гениями рождаются? Нет, просто учишься работаешь. Причем не ток много как может показаться.

Oleg
20.09.2018
08:01:58
Привет, есть ли возможность выдать пользователю право менять свой пароль?

Vova
20.09.2018
08:06:37
Полагаю создавать пользователя поверх другой базы данных и давать ему по необходимости права на запись в этой бд через роль

Google
p4sh
20.09.2018
08:08:16
Посмотрите, вдруг поможет: https://docs.mongodb.com/manual/tutorial/change-own-password-and-custom-data/

use admin db.createRole( { role: "changeOwnPasswordCustomDataRole", privileges: [ { resource: { db: "", collection: ""}, actions: [ "changeOwnPassword", "changeOwnCustomData" ] } ], roles: [] } )

создание кастомной роли с определенным Action

Встроенной подобной роли вроде нет

есть такая встроенная которая может менять пароль любого пользователя

но врятли это удобно)

Привет, есть ли возможность выдать пользователю право менять свой пароль?
А вот список встроенных ролей: https://docs.mongodb.com/manual/reference/built-in-roles/#built-in-roles

Oleg
20.09.2018
08:11:44
да, читаю про changeOwnPasswordCustomDataRole. знаком с монгой буквально 4й день, и не понимаю такой штуки как юзер внутри базы. это получается мне надо делать бесправного юзера с тем-те именем в базе admin?

p4sh
20.09.2018
08:25:48
-_- зачем

MongoDB provides the built-in database user and database administration roles on every database. MongoDB provides all other built-in roles only on the admin database.

Bro
20.09.2018
08:29:52
странные вещи получаеются есть запрос find({field1: {$exists: true}, field2: false}).limit(1000)

итерация по курсору ничего по времени не занимает

а вот

cursor.count()

270+ секунд

коллекция 100+ миллионов

Nick
20.09.2018
08:40:57
итерация по курсору ничего по времени не занимает
а вы точно выбираете все запии из курсора? или логирете время только до получения курсора? если второе, то нужно понимать что курсор отдается как только повилась первая порция данных, а не все

Bro
20.09.2018
08:41:16
list(objs)

мда странно реально cusror.count()

мистика какая-то

Google
Constantin
20.09.2018
09:38:15
странные вещи получаеются есть запрос find({field1: {$exists: true}, field2: false}).limit(1000)
Пришлите полный пример кода, в каком-нибудь pastebin или подобном

Nick
20.09.2018
09:48:29
https://dumpz.org/akkqBxKpW6mN
э у вас там лимит

это вы замерили каунт, а как замеряете итерации по курсору?

Bro
20.09.2018
09:51:17
list(users[:1000])

Nick
20.09.2018
09:51:40
так выведите всех юзеров а не с лимитом

Bro
20.09.2018
09:52:16
там батч процессинг берется 1000 документов с коллекции обрабатывается и затем процесс перезапускается

Nick
20.09.2018
09:52:49
и что? вы сравниваете время обхода всей коллекции и поулчения 1000 доков, не кажется ли вам что это некорректно сравнивать?

давайте сравнивать по нормальному

Bro
20.09.2018
09:53:07
в итоге я явно курсор преобразую users_list = list(users) и вместо users.count() делаю len(users_list)

почему он обходит коллекцию

Nick
20.09.2018
09:53:42
а что делает ваш list(user) ?

Bro
20.09.2018
09:53:53
преобразует курсор в список

Nick
20.09.2018
09:54:15
нет, что под капотом делается? я не силен в питонах, поэтому нужно от вас это узнать

он просто обертку делает или как

AstraSerg
20.09.2018
09:56:55
list(users[:1000])
Пордозреваю, что здесь при вызове users[...] идёт неявное преобразование курсора в список, для которого требуется фетч всех документов. И тогда сравнение действетельно не корректное, как и писал @yatoba

Bro
20.09.2018
09:57:11
я вот тоже подозреваю

вернее не подозреваю а прям знаю

что он зачем-то сканирует полностью коллекцию

причем

Google
AstraSerg
20.09.2018
09:57:54
list(users[:1000])
Сравните type(users) и type(users[:1000])

Nick
20.09.2018
09:58:06
я чтото потерял суть разговора, давайте по новой, в чем пробелма?

Bro
20.09.2018
09:58:39
причем то же самое с монгоконсоли происходит

с = db.usernames.find({...}).limit(1000)

c.count()

AstraSerg
20.09.2018
09:59:21
что он зачем-то сканирует полностью коллекцию
что значит зачем-то? по-другому ни как не сделать. Пока он курсор, данные из БД не фетчатся, когда становится списком (питоновским объектом) их нужно вытащить

Bro
20.09.2018
09:59:28
интересно

там есть with_limit_and_skip=False

хм

https://github.com/mongodb/mongo-python-driver/blob/master/pymongo/cursor.py#L712

там написано что Returns the number of documents in the results set for this query. Does not take :meth:limit and :meth:skip into account by default

да но тогда почему обычный .count() занимает столько времени

AstraSerg
20.09.2018
10:04:43
да но тогда почему обычный .count() занимает столько времени
написано, что DEPRECATED, попробуйте count_documents

Bro
20.09.2018
10:06:08
он только недавно стал deprecated

да и какая разница говорю же из монго консоли то же самое

на js

надо на jira еще у них пошуршать

Nick
20.09.2018
10:09:30
и всетаки я не могу понять в чем проблема. в том что время получения курсора и вермя выполнения метода count разное?

Bro
20.09.2018
10:10:09
непонятно почему он сканирует всю коллекцию при вызове метода.

Nick
20.09.2018
10:10:19
какого метода?

Google
Vova
20.09.2018
10:10:48
Курсор просто описывает запрос к бд, а выполнение всех действий курсора выполняется уже при соответствующем вызове

Bro
20.09.2018
10:12:50
нашел https://jira.mongodb.org/browse/SERVER-3268?jql=text%20~%20%22cursor%20count%22

> c.count(true) 1000

вооо

так быстро работает

вообщем после .limit() если хочешь узнать сколько там элементов в курсоре нужно делать cursor.count(true)

Nick
20.09.2018
10:15:18
только вот порос зчем вам каунт если вы его итак лимитировали 1000

Bro
20.09.2018
10:15:47
а там может быть меньше / больше

Nick
20.09.2018
10:16:02
больше не может, лимит же

Bro
20.09.2018
10:16:12
cursor.count(with_limit_and_skip=True) в pymongo

1000 от балды значение вариативно

Nick
20.09.2018
10:17:09
я не про это, суть count() посчитать количество доков подходящих под условие, которые лежат в бд

какой смысл запрашивать количество доков которые вы итак вытаскиваете из бд посредством курсора, которому наплевать на количество

может опишите задачу которую вы решаете и я тогда пойму почему так а не иначе

Bro
20.09.2018
10:18:54
https://docs.mongodb.com/manual/reference/method/cursor.count/

Counts the number of documents referenced by a cursor. Append the count() method to a find() query to return the number of matching documents.

решена задача уже

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