Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Работа с Mango (Perl+mongo)
|
|||
|---|---|---|---|
|
#18+
Есть у меня БД в mongo. В БД есть несколько коллекций документов. Мне нужно перебрать документы в этой коллекции и часть документов обновить. Не пойму, как это должно происходить. Для перебора коллекции использую такой код: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Данный код успешно выводит все документы из коллекции. Атрибуты channelName и description это строки, атрибут _id это LUUID, в дампе он выглядит как Код: plaintext 1. 2. 3. 4. Мне нужно обновить у этих документов некоторые атрибуты. Для этого у коллекции есть метод update. Но как бы я не задавал первый аргумент (как $id, как &hex2bytes($id), как {'_id'=>$rs->{'_id'}}), код ничего не обновляет. Вот у меня есть такой код (исходя из того, что для find и update используется один синтаксис запроса): Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Но этот код возвращает пустые данные, т.е. запрос на поиск не возвращает данных. Как его нужно указывать, чтобы он все-таки заработал? И второй вопрос. При выполнении update вторым аргументом идет структура (хеш). В ней нужно указывать полное содержимое документа или только изменяемые данные? То есть такой код: Код: php 1. он у документа $oid обновит только атрибут foo? Или он у документа $oid оставит только атрибут foo и удалит все остальное? Если последнее, то как нужно обновлять документы? Считывать весь документ, обновлять в нем данные и заносить в БД? Другими словами, какой код мне использовать: Код: php 1. 2. или Код: php 1. 2. ________________________ Мы смотрим с оптимизмом... ...в оптический прицел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2014, 09:23 |
|
||
|
Работа с Mango (Perl+mongo)
|
|||
|---|---|---|---|
|
#18+
Какая-то ерунда выходит. Второй вариант не подходит, документ пересоздается и если указать только отдельные поля, то только они и останутся в документе после обновления. Но и первый вариант не подходит, выдает ошибку "Write error at index 0: The _id field cannot be changed from {_id: BinData} to {_id: BinData}". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2014, 13:18 |
|
||
|
Работа с Mango (Perl+mongo)
|
|||
|---|---|---|---|
|
#18+
Перешел на MongoDB, думал может там все будет работать. Что-то ничего не пойму. Есть такой код: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. С использованием SUBTYPE_UUID_DEPRECATED наконец начали находиться документы. Но теперь какая-то ерунда с обновлением данных. Во первых, я не могу обновить нужные поля в $rs и отправить данные обратно — в этом случае я получаю такое сообщение: Код: plaintext 1. Изменился порядок документа, он был первым в коллекции, теперь последний. 2. Порядок полей в документе перепутался. 3. Самое главное — изменились типы данных полей и их содержимое. UUID заменился на Binary, 1 заменился на NumberLong(1) и т.п. Мне нужно просто пройтись по всей коллекции и изменить пару полей, не меняя более ничего. Или Perl тут неподходящий инструмент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2014, 16:18 |
|
||
|
Работа с Mango (Perl+mongo)
|
|||
|---|---|---|---|
|
#18+
Сделал так: Код: php 1. В принципе, главный вопрос это решает. Но хотелось бы еще сохранить порядок полей в документе. Как это сделать с помощью Tie::IxHash я сам пока не пойму; у меня не hash, а hashref. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2014, 17:05 |
|
||
|
Работа с Mango (Perl+mongo)
|
|||
|---|---|---|---|
|
#18+
Просьба проверить, правильно ли я думаю? Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2014, 17:32 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38847262&tid=1462126]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 263ms |
| total: | 378ms |

| 0 / 0 |
