2016-10-20 22 views
2

を存在しない。これは、文書構造が私の場合には可能性がどのようであれば、それを挿入します。のMongoDB:更新ネストされた配列要素または

{ 
    "_id" : "P9H59RuSbnm45erj7", 
    "description" : [ 
     { 
      "content" : "Something", 
      "language" : "en", 
      "timestamp" : 1476958705 
     }, 
     { 
      "content" : "Irgendetwas", 
      "language" : "de", 
      "timestamp" : 1476958705 
     } 
    ] 
} 

今私は、特定の言語の内容を更新します。 説明配列には言語が不足している可能性があります。そうでない場合は

{ 
    "_id" : "P9H59RuSbnm45erj7", 
    "description" : [ 
     { 
      "content" : "Something", 
      "language" : "en", 
      "timestamp" : 1476958705 
     } 
    ] 
} 

それでは、私がやっていることは、言語が存在した場合最初にチェックすることです、それは既存のされている場合は、

  1. 、私は簡単な更新/ $を行いますが
  2. を設定しました既存、私は更新を行います/ $ addToSet

これは簡単にすることができます私の質問です。既存の言語をチェックしてから、2つの異なる更新クエリを使用する必要がありますか?これでコードがポップアップします...

私は流星のアプリでこのコードを使用していますので、私はminimongoを使用しています。

if (Collection.find({ _id: 'P9H59RuSbnm45erj7', 'description.language': 'en' }).count() > 0) { 
    Collection.update(
     { 
      _id     : 'P9H59RuSbnm45erj7', 
      'description.language': 'en' 
     }, 
     { 
      $set: { 
       'description.$.content' : value, 
       'description.$.timestamp': Math.floor(Date.now()/1000) 
      } 
     } 
    ); 
} 
else { 
    Collection.update(
     { _id: 'P9H59RuSbnm45erj7' }, 
     { 
      $addToSet: { 
       description: { 
        content : value, 
        language : 'en', 
        timestamp: Math.floor(Date.now()/1000) 
       } 
      } 
     } 
    ); 
} 

答えて

2
db.Test8.update(
     { _id: 1, "description.language":{$eq:"en"} }, 
     { 
       $set: { "description.$.content": "content5" } 
     }, 
     {}, function (err, result) { 

      // if result.nMatched == 0 then make your $addToSet 
      // because there are no query 

     } 
    ); 

この中でクエリを持っている利点は、時間だった1 - クエリの代わりに、2とのみまれ時間2 - クエリを最大限に活用することです。

最も頻繁に発生するシナリオに応じて異なります。 ほとんどの場合、更新と言われるように、2つのクエリの代わりに1つのクエリを作成することができます。

私はそれを改善するために他の方法を知らない。

+0

私のケースではほとんどの場合、それは更新であり、めったにプッシュではないと思います。 – user3142695

+0

@ user3142695私はquery1を使ってquery2を反転させます。 –

関連する問題