我在MongoDB中的文档与我需要更新对象的2级深度嵌套数组,像这样:更新嵌套阵列
{
id: 1,
items: [
{
id: 2,
blocks: [
{
id: 3
txt: 'hello'
}
]
}
]
}
如果只有一个层次深阵列我可以使用位置操作,以更新它的对象,但对于第二个层次,我想出的唯一选择是使用位置运营商与嵌套对象的指数,像这样:
db.objects.update({'items.id': 2}, {'$set': {'items.$.blocks.0.txt': 'hi'}})
这种方法可以工作,但因为我似乎危险的我建立Web服务和索引编号应该来自客户端NT可以发送100000作为索引,这将迫使MongoDB创建一个具有空值的100000个索引的数组。
是否有任何其他的方式来更新这些对象嵌套在那里我可以参照对象的ID,而不是它的位置,或者可能的方法来检查,如果提供的索引超出范围的查询使用它之前?
我建议你重新考虑这一模式,并找到不同的设计,这样就可以利用该MongoDB中提供的强大功能。有没有简单/超级有效的方式来更新数组AFAIK中的特定项目。你可以重新设计这个,这样你就可以充分利用'addToSet','pop'和其他数组运算符吗? – brianz 2010-11-08 18:29:21
谢谢你的建议,是的,我可以,事实上我已经做到了。提出这个问题,我只是想确定我没有失去任何东西。 – Anton 2010-11-08 22:50:30
我也面临同样的问题。所以你可以发布你的样本重新设计的模式? – Damodaran 2012-11-12 10:27:11