Запросы к коллекции в MongoDB - PullRequest
1 голос
/ 29 ноября 2011

У меня есть документ, который был сохранен через драйвер C #. У него есть свойство SortedList. Вот как выглядит документ в MongoDB:

{
  "_id": {
    "$oid": "47f1f704c42f56380ac80000"
  },
  "Things": {
    "abc": {
      "Color": "blue",
      "Shape": "square",
    }
    "def": {
      "Color": "red",
      "Shape": "circle"
    }
   }
}

Здесь Things - это SortedList, а MyClass имеет свойства Color и Shape. Проблема, которую я имею, пытается запросить внутри Things.

В частности, я хочу установить цвет каждого MyClass, который имеет определенный цвет. Я не могу понять, как это сделать, поскольку он индексируется на том, что, по-видимому, является динамическим именем поля.

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Лучшее, что можно сделать, - это изменить структуру документа.

Сделайте так, чтобы ключ «вещей» указывал на массив MyClass, и берите то, что вы использовали в качестве ключа, и делайте его ключом имени документов в массиве.

{
  "_id": {
    "oid": "47f1f704c42f56380ac80000"
  },
  "Things": [
    {
      "Name": "abc",
      "Color": "blue",
      "Shape": "square",
    },
    {
      "Name": "def",
      "Color": "red",
      "Shape": "circle"
    }
  ]
}

Как только вы настроите документ таким образом, вы можете использовать позиционный оператор для обновления первого MyClass в массиве Things, который соответствует вашему запросу, например:

db.things.update( { "Things.Color": "blue" }, {$set: {"Things.$.Color": "red"} })

Если вы хотите изменить все соответствующие элементы, о чем вы на самом деле спрашивали, вам, вероятно, нужно выполнить запрос $ where, который перебирает вещи в массиве.

0 голосов
/ 29 ноября 2011

Что такое «abc» и «def»? Никогда не пытался сериализовать SortedList. Если вы используете список T, он создаст встроенный массив вместо встроенного документа, который у вас есть.

Вы можете выполнять запросы во встроенных документах и ​​массивах, используя точечную запись, но здесь вам нужно будет выполнить Things.abc.Color или Things.def.Color.

...