2012-01-18 14 views
0

は、私は次のような構造の文書が含まれているタグのコレクションを持っている:配列から効率的に一括してmongodbドキュメントの値を挿入して更新するには?

{ 
    word:"movie", //tag word 
    count:1  //count of times tag word has been used 
} 

I午前タグのコレクションで更新/追加する必要が新しいタグの配列を指定:

["music","movie","book"] 

I次のクエリを使用して、タグコレクションに現在存在するすべてのタグをカウントできます。

db.Tags.update({word:{$in:["music","movies","books"]}}, {$inc:{count:1}}), true, true); 

これは効果的な戦略ですが私はコレクション内に見つからなかったタグ値を確認することができず、upsertフラグをtrueに設定しても、未確認タグの新しい文書は作成されませんでした。

ここで私は立ち往生しています。タグコレクションに「新しい」値を一括して挿入するにはどうすればよいですか? 新しいタグ値をアップアップするように、アップデートをうまく利用できる他の方法はありますか?

(注:私はいいが必要ではないだろうマングース/ノード・モンゴネイティブを使用したマングース、ソリューションでのNode.jsを使用しています)先に

おかげ

答えて

1

upsertを使用しての概念と$inオペレータは同時に不自然である。 upsert if *any* inupsert if *none* inの間に異なる方法がないため、これは単に機能しません。

この場合、MongoDBはあなたがしたくないバージョンを実行しています。しかし、行動を変えることはできません。

タグの配列をループして3つの連続した書き込みを発行することをお勧めします。私はそれが迷惑で、コードの匂いが悪いことを知っていますが、それはMongoDBの仕組みです。

+0

このループは本当にうんざりです...私は、コンパイルされていないPythonを使用しています。ループは、文書の長いリストを常に更新する必要があるため、コードが大幅に遅くなります。 他のドキュメントベースのデータベースを調べて、何か良いものが見つからないかどうかを確認しています。 – RockScience

関連する問題