如果您知道数组中的索引,则可以使用点表示法直接访问数组元素.
update( { _id: ObjectId(xxxx) }, { $set: { 'columns.0.panels.0.top' : 125}} )
确保将引号中的点标记路径包含为字符串.
编辑:
为了更详细地介绍它如何动态工作,我将在PHP中给出一个示例:
$action = array("columns.$colNum.panels.$panelNum" => $newValue);
是的,有位置运算符,但它看起来不够先进,无法更改数组中的数组,这可能会在MongoDB 1.7.0中发生变化
您可以使用另一种方法,而不是尝试将此信息填充到嵌套文档中.试着把它弄平.您可以创建具有面板和列对象的集合:
列对象:
{ _id: // MongoId type: 'column', user: 'username', order: 1, width: 30, }
面板对象:
{ _id: //MongoId type: 'panel', user: 'username', parentColumn: //the columns _id string top: 125, left: 100 }
然后,您可以通过执行以下操作找到属于用户的所有列:
find({ type: 'column', user:'username'});
您可以通过执行以下操作找到特定列的所有面板:
find({type: 'panel', columnOwner:'ownerID'});
由于每个列和面板都有一个MongoDB给它的唯一ID,因此您可以轻松查询和自动设置选项.
update({'_id': ObjectId('idstring')}, {$set : { 'top' : 125}});