sql >> データベース >  >> NoSQL >> MongoDB

MongoDBでサブサブ配列アイテムを$setする方法

    配列内のインデックスがわかっている場合は、ドット表記を使用して配列要素に直接アクセスできます。

    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}});
    


    1. Node Mongo Native-カーソルが使い果たされたことを確認する方法は?

    2. Gradleを使用したSpringDataおよびMongoDB用のQueryDSLの構成

    3. Meteor Upデプロイメント、meteormongo--urlを使用できません

    4. 埋め込まれたドキュメントを探してマングースでアップサートを実行するにはどうすればよいですか?