我有一个通过C#驱动程序存储的文档。它具有SortedList属性。以下是文档在MongoDB中的外观:
{
"_id": {
"$oid": "47f1f704c42f56380ac80000"
},
"Things": {
"abc": {
"Color": "blue",
"Shape": "square",
}
"def": {
"Color": "red",
"Shape": "circle"
}
}
}
此处Things
是SortedList
,MyClass
的属性为Color
和Shape
。我遇到的问题是尝试在Things
内查询。
具体来说,我想要做的是设置具有特定颜色的每个MyClass
的颜色。我无法弄清楚如何做到这一点,因为它的索引似乎是一个有效的动态字段名称。
答案 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。