配列内のインデックスがわかっている場合は、ドット表記を使用して配列要素に直接アクセスできます。
update(
{ _id: ObjectId(xxxx) },
{ $set: { 'columns.0.panels.0.top' : 125}}
)
ドット表記のパスは、必ず引用符で囲んで文字列として囲んでください。
編集:
これが動的にどのように機能するかについて詳しく説明するために、PHPで例を示します。
$action = array("columns.$colNum.panels.$panelNum" => $newValue);
はい、位置演算子 があります 、ただし、十分に進んでいないようです 配列内の配列を変更するには、MongoDB1.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}});