@MongoDBRussian

Страница 201 из 342
XENONIUM
08.03.2018
16:17:46
if flows.find_one({{'id': flowid}, { '$or': [{'settings': {'pin': {'$exists': False}}}, {'settings': {'pin': False}}]}}) is not None:

Что-то не так, ругается

Что-то с этой or связкой...

Yurii
08.03.2018
16:20:18
find_one({'id': flowid, '$or': [{'settings.pin': {'$exists': False}}, {'settings.pin': False}]})

Google
XENONIUM
08.03.2018
16:22:48
Благодарю

А как можно в объекте изменить определенный элемент? У меня методом $SET весь объект перезаписывается

Yurii
08.03.2018
16:31:50
Ну вообще-то должен только само свойство, которое ты передаешь в сет, но надо пример для большей наглядности.

XENONIUM
08.03.2018
16:35:22
Есть в документе объект {settings:{type:True}} Затем я выполняю flows.update_one({условие},{$set:{settings:{pin:True}}) и type затирается, то-есть, документ перезаписывается

Vlad
08.03.2018
16:41:25
Попробуй flows.update_one({условие},{$set:{"settings.pin":True}})

XENONIUM
08.03.2018
16:57:27
Попробуй flows.update_one({условие},{$set:{"settings.pin":True}})
Очень странно. Для pin сработало, а такой же в точности код для type перезаписывает объект

flows.update_one({'id':flowid},{'$set':{'settings.type':'public'}})

Может баг какой-то

Оказалось, баг. Перезапустил еще раз и заработало. Благодарю

Dimanius851
09.03.2018
13:22:57
ребят

всем привет

я новичек, хочу добавить в схему одно поле price: integer, я сначала хотел писать миграционный скрипт, но потом просто добавил в схему поле и перезапустил сервер и уже у существующих рекордов это поле появилось, это нормально? ps: mongoose

когда запрашиваешь с сервера показывает price: 0, когда в консоли монги - этого поля нет

Google
Dimanius851
09.03.2018
13:52:29
написал так db.games.find({}).forEach(game => { game.price = 0; db.games.save(game); })

Nick
09.03.2018
13:55:01
почитайте доки к монгусу по поводу дефолтных значений полей

и да где мемасик?)

Nick
09.03.2018
13:56:37
ну так ты добавил его в сехме на сервере, а не в схеме на бд. это те не sql где нужно явно создать колонку в базе

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

но в само й базе ничего при этом не изменится

а когда начнешь заливать новые данные, то тогда и начнет появляться поле

Dimanius851
09.03.2018
13:58:39
ну а вот скрипт для выполнения в терминале я написал, он же реально добавляет всё?

ну всмысле, я проверил, - да

@yatoba

Nick
09.03.2018
13:59:47
я бы сделал обыный апдейте

про сейв хз если честн

keystr0ke
09.03.2018
14:01:33
я не понимаю вопроса) обнови всю коллекцию по селектору {‘price’:{‘$exists’:False}} и будет как ты ожидаешь

Dimanius851
09.03.2018
14:04:46
ок, спасибо, первый раз просто делаю

ручки дрожат

Nick
09.03.2018
14:07:14
чтоб руки не дрожали делаешь бекап, разворачиваешь на тестовом стенде и играешься там

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

Alexandr
09.03.2018
17:26:32
всем привет

комрады, подскажите плз два вопроса 1) где можно качнуть норм видеокурсы на русском по mongodb?

Google
Alexandr
09.03.2018
17:28:13
2) https://ru.stackoverflow.com/questions/794971/%D0%9A%D0%B0%D0%BA-%D0%B2-mongodb-%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D0%B8%D1%82%D1%8C-%D0%B4%D0%BE%D1%87%D0%B5%D1%80%D0%BD%D0%B5%D0%B5-%D0%BF%D0%BE%D0%BB%D0%B5-%D0%B2-%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B0%D1%85-%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0

если не лом )

keystr0ke
09.03.2018
17:35:09
комрады, подскажите плз два вопроса 1) где можно качнуть норм видеокурсы на русском по mongodb?
Курсы хорошие на MongoDB university, но на ангийском. Возможно сможете найти с субтитрами - так будет проще

Alexandr
09.03.2018
17:37:25
Курсы хорошие на MongoDB university, но на ангийском. Возможно сможете найти с субтитрами - так будет проще
Спасибо, гляну. А на русском? в ютубике есть на русском, просто не хочу время терять выискивая среди шлака.

тут можно аггрегацию использовать, если вам критично на стороне базы это сделать конечно
1. какой конкретно командой из агрегации? 2. А как это сделать не "на стороне базы" ?

keystr0ke
09.03.2018
17:38:49
не видел никогда на русском ничего такого, разве что отдельные выступления на конференциях, но это уже не курсы

1. какой конкретно командой из агрегации? 2. А как это сделать не "на стороне базы" ?
1. $project 2. Вы можете написать скрипт, который просто обновит коллекцию

Alexandr
09.03.2018
17:44:51
1. $project 2. Вы можете написать скрипт, который просто обновит коллекцию
1. ок, покручу. 2. ну скрипт-то всё равно обращается к базе и выполняет ту же самую команду "на стороне базы"

keystr0ke
09.03.2018
17:45:40
ну вам виднее как делать, приходите к нам еще)

Alexandr
09.03.2018
17:45:54
хорошоу, спасибос _)

keystr0ke
09.03.2018
18:01:28
хорошоу, спасибос _)
для наглядности еще пример начальная коллекция q: /* 1 */ { "_id" : ObjectId("5aa2c9b5faf432cbff0ac65b"), "a" : { "b" : "c" }, "d" : { "e" : "f" } } набор команд агрегации db.getCollection('q').aggregate([{'$match':{}}, {'$project':{'a.b':true, 'a.e':'$a.b','_id':true}}, {'$out':'q'}]) После операции агрегации в коллекции q будет: { "_id" : ObjectId("5aa2c9b5faf432cbff0ac65b"), "a" : { "b" : "c", "e" : "c" } } Для вашего примера нужно немного подредактировать

Alexandr
09.03.2018
18:07:18
спасибо, покумекаю..

Котяй Негодяй
10.03.2018
14:14:53
А я же могу отредактировать документ, изменив значение _id?

При соблюдении ограничений индекса, конечно.

Или значение устанавливается навсегда?

yopp
10.03.2018
14:25:13
_id невозможно изменить

Nick
10.03.2018
17:54:13
Или значение устанавливается навсегда?
ничего не мешает вам удалить старый док и вставить новый с новым _id

Леха
10.03.2018
19:05:28
Чувак, Щас вечер субботы. Ты серьезно?

keystr0ke
10.03.2018
19:06:37
Через точку укажи, ты неправильно селектор указываешь, погляди как в документации написано

Google
keystr0ke
10.03.2018
19:07:02
Поле.поле.поле:значение

А не поле:поле:поле

yopp
10.03.2018
20:12:01
Read only на сутки за хамство.

Саня
10.03.2018
20:16:13
Ребята, подскажите пожалуйста.

Вот у меня есть коллекция, в ней документы, в которых в каждом есть два массива айдишников.

Где бы хранить соответствующие названия для этих айдишников? Отдельные коллекции создавать и делать через Mongoose refs?

Ну то есть джоинов же здесь нет.

А мне при запросе соответственно надо показывать именно названия.

keystr0ke
10.03.2018
20:28:25
Либо dbref, либо отдельную коллекцию, да. Джоины в каком-то смысле есть но они тяжёлые очень

Саня
10.03.2018
20:29:11
Просто хранить в массиве не только айдишники, а объекты, в которых в каждом и айди и название — думаю излишек.

keystr0ke
10.03.2018
20:29:51
Почему? Вы же так и будете запрашивать

Саня
10.03.2018
20:31:18
Ну они же будут очень сильно дублироваться.

Мультимиллионироваться. =)

Ну то есть если говорить предметно — это массив производственных факторов.

yopp
10.03.2018
20:31:50
[{_id: oid, name: ”foo"},..., {}]

Саня
10.03.2018
20:32:10
[{_id: oid, name: ”foo"},..., {}]
Ну да, это первое, что напрашивается.

yopp
10.03.2018
20:32:36
Это единственное что будет разумно

Сколько у вас документов?

Саня
10.03.2018
20:32:55
Порядка 300.

Google
Саня
10.03.2018
20:33:07
И в массивах будет по 5-10 документов.

keystr0ke
10.03.2018
20:33:13
Это мало, никакого излишки не будет

Саня
10.03.2018
20:33:25
Ну с точки зрения логики я имею ввиду.

yopp
10.03.2018
20:33:35
Порядка 300.
Не забивайте себе голову оптимизацией :)

Make it work, make it right, make it fast

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