6

このデータを検討してください

{ 
    "_id" : ..., 
    "array" : [
        { "name" : "value1","flag" : true } ,
        { "name" : "value2","flag" : false }
  ]
}

2 番目の配列要素を (false から true に) 切り替えたい

次のような非常に便利な $ 位置演算子を使用して、特定の要素を更新できることを知っています。

db.myCollection.update(
    {'array.name':'value2'},
    {
        $set: {
            'array.$.flag':true
        }
    },false,true);  

しかし、値の設定にも $ 位置演算子を使用する方法はありますか?

例えばこんな?

db.myCollection.update(
    {'array.name':'value2'},
    {
        $set: {
            'array.$.flag':'!array.$.flag' //<--
        }
    },false,true);  
4

1 に答える 1

9

いいえ、現時点ではできません。MongoDB では、ドキュメント内のフィールドに依存する更新で式を使用できません。2 つの別々の操作で取得および設定する必要があります。

ただし、1 回の操作で (したがってアトミックに) 作成するためのトリックがあります。ブール値の代わりに、整数を使用します。次に、偶数の値はfalse、奇数の値は -を表しますtrue

// get documents with false flag
db.collection.find({flag: {$mod: [2, 0]}})

// get documents with true flag
db.collection.find({flag: {$mod: [2, 1]}})

// toggle flag
db.collection.update(query, {$inc: {flag: 1}});
于 2012-05-08T21:40:36.470 に答える