查询MongoDB中的集合

时间:2011-11-29 06:01:26

标签: mongodb mongodb-.net-driver

我有一个通过C#驱动程序存储的文档。它具有SortedList属性。以下是文档在MongoDB中的外观:

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

此处ThingsSortedListMyClass的属性为ColorShape。我遇到的问题是尝试在Things内查询。

具体来说,我想要做的是设置具有特定颜色的每个MyClass的颜色。我无法弄清楚如何做到这一点,因为它的索引似乎是一个有效的动态字段名称。

2 个答案:

答案 0 :(得分:1)

最好的办法可能是更改文档结构。

使“thing”键指向一个MyClass数组,并在键入时使用你正在使用的内容,并使其成为数组中文档的名称键。

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

以这种方式设置文档后,您可以使用位置运算符更新与您的查询匹配的Things数组中的第一个MyClass,如下所示:

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

如果你想更改所有匹配的项目,你实际问的是什么,你可能需要做一个$ where where查询迭代数组中的Things。

答案 1 :(得分:0)

什么是'abc'和'def'?从未尝试过序列化SortedList。如果你使用List of T,它将创建一个嵌入式数组,而不是你在这里的嵌入式文档。

您可以使用点表示法在嵌入的文档和数组中查询,但在这里您必须执行Things.abc.Color或Things.def.Color。