powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / MongoDB: Условия и редактирование дочерних полей.
4 сообщений из 4, страница 1 из 1
MongoDB: Условия и редактирование дочерних полей.
    #39484717
Wisky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приходится вникать в MongoDb.
Ни как не могу найти информацию по операциям над дочерними полями.
Есть некая коллекция документов:
Код: plaintext
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.
 {
   "_id": ObjectId("5919ac68a8199216ac5058f4"),
   "Name" : "Подтверждение",
   "Algorithm": {
     "NO": {
       "Length": 290,
       "DocCount": 300
     },
     "YES": {
       "Length": 350,
       "DocCount": 272
     }
   }
 }
 {
   "_id": ObjectId("5919ac68a8199216ac5058f5"),
   "Name" : "Цвета",
   "Algorithm": {
     "Black": {
       "Length": 290,
       "DocCount": 300
     },
     "White": {
       "Length": 350,
       "DocCount": 272
     }
   }     
  }

Алгоритмы имеют статистику по категориям (YES, NO, Black, White).
Если необходимы документы где категория черных 30, я пишу запрос:
Код: plaintext
db.Classifiers.find({'Algorithm.Black.DocCount':30})

А как сделать выборку документов, где хоть в какой нибудь DocCount = 30:
Код: plaintext
db.Classifiers.find({'Algorithm.ЛЮБАЯ КАТЕГОРИЯ.DocCount':30})

Или как мне во всех алгоритмах, в каждой категории переименовать поле Length в L ?
...
Рейтинг: 0 / 0
MongoDB: Условия и редактирование дочерних полей.
    #39485021
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wisky, а с какой целью выбрана именно такая схема?

Если YES, NO, Black, White - это дискриминатор типа, то под это дело уже есть механизм:
http://codingcanvas.com/storing-polymorphic-classes-in-mongodb-using-c/

Если просто название алгоритма, то и добавьте соответсвующее поле:
Код: javascript
1.
2.
3.
4.
5.
"Algorithm": {
    "Name": "Black",
    "Length": 290,
    "DocCount": 300
}



А для переименования поля используйте rename:
https://docs.mongodb.com/manual/reference/operator/update/rename/
...
Рейтинг: 0 / 0
MongoDB: Условия и редактирование дочерних полей.
    #39485056
Wisky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAЕсли YES, NO, Black, White - это дискриминатор типа, то под это дело уже есть механизм:
http://codingcanvas.com/storing-polymorphic-classes-in-mongodb-using-c/

А для переименования поля используйте rename:
https://docs.mongodb.com/manual/reference/operator/update/rename/

За дискриминатор большое спасибо, не знала, скорее обязательно пригодится, но не здесь.

Подробнее о схеме:
Документы базы - тематизаторы (достаточно большого размер, сколько позволяет монго).
"YES", "NO" - это пример категории тематизатора со статистиками, тегами и другим барахлом.

Для редактирования документа и переименования надо указывать полный путь, а можно ли одним запросом, а не получая список родителей, многократно корректировать каждую категорию по отдельности (каждый документ * каждую категорию, это многовато раз)?
Или надо корректировать текущую схему (досталась по наследству), использовать дерево словарей кажется удобнее, чем создавать список структур.
...
Рейтинг: 0 / 0
MongoDB: Условия и редактирование дочерних полей.
    #39485155
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wisky,

если Вы переделаете схему на вложенный массив (nested array), то получите бонусы в виде индексов и встроенных операций по работе с массивами.
Это будет и удобнее и гораздо производительнее.

Или можете использовать оператор $where :
Код: javascript
1.
2.
3.
4.
5.
6.
7.
db.Classifiers.find({
  $where: function() {
    for (var key in this.Algorithm) {
      if (this.Algorithm[key].DocCount == 30) return true;
    }
    return false;
  }})
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / MongoDB: Условия и редактирование дочерних полей.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]