【发布时间】:2013-08-12 23:12:46
【问题描述】:
我有一个深度嵌套的文档结构,像这样:
{id: 1,
forecasts: [ {
forecast_id: 123,
name: "Forecast 1",
levels: [
{ level: "proven",
configs: [
{
config: "Custom 1",
variables: [{ x: 1, y:2, z:3}]
},
{
config: "Custom 2",
variables: [{ x: 10, y:20, z:30}]
},
]
},
{ level: "likely",
configs: [
{
config: "Custom 1",
variables: [{ x: 1, y:2, z:3}]
},
{
config: "Custom 2",
variables: [{ x: 10, y:20, z:30}]
},
]
}
]
},
]
}
我正在尝试更新集合以插入一个新配置,如下所示:
newdata = {
config: "Custom 1",
variables: [{ x: 111, y:2222, z:3333}]
}
我正在 mongo(在 Python 中)尝试这样的事情:
db.myCollection.update({"id": 1,
"forecasts.forecast-id": 123,
"forecasts.levels.level": "proven",
"forecasts.levels.configs.config": "Custom 1"
},
{"$set": {"forecasts.$.levels.$.configs.$": newData}}
)
我收到“如果没有包含数组的相应查询字段,则无法应用位置运算符”错误。在 mongo 中执行此操作的正确方法是什么?这是 mongo v2.4.1。
【问题讨论】:
-
您是要替换其中的数据,还是使用该新数据向数组添加另一个索引?
-
这就是我正在收集的内容。那么目前的解决方法是什么?这很蹩脚,如果你不能做这样的事情,嵌套文档有什么意义。
-
@tymeJV 是的,您需要为密钥中的其他索引使用数值。 Mongo 对更新嵌套数组的支持很差。
-
这是不可能的,可耻。如果您无法创建嵌套文档,那么 mongo 的意义何在。您必须创建多个集合,此时您又回到了关系数据库!
-
@reptilicus -- 同意。
标签: mongodb