2017-12-26 32 views
0

私は、1 dbからのエクスポートに納得できず、別のものにインポートするコレクションを持っています。MongoDBクエリを実行してループ内のシーケンスフィールドを更新します

私はコレクションのフィールドに 'seqNo'と呼ばれるフィールドがあります。これは単にドキュメントの実行回数を保持し、インポート中に重複するseqNo値をインポートしました。

私は現在、コレクション内のドキュメントを反復処理する方法を理解し、1の後にドキュメントを更新し、そのseqNoのインクリメントカウンタを使用しています。

私はドキュメントを読んでいて、数字を増やして挿入する方法を見てきましたが、機能のように思えますし、アップデートでこれを行う方法もわかりません。

https://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field/

は私が探しているところです、そしてより恒久的なもののように思えるし、実際に私がやって探していないものを。

+0

これは一回限りの修正です。はいですか?コレクション全体を反復し、意味のある方法で並べ替え、seqNoをインクリメントして更新するだけです。 –

+0

はい、私もそれを理解しました。 mongoシェルで 'forEach()'を使用し、次にカウンターを繰り返し実行して、それぞれを更新する短い関数です。上記の私の解決策を私の編集した質問に追加します。 – bmcgonag

答えて

0

これを使用して私の答えが見つかりました。

mongoシェルでは、最初にカウンタの初期値を設定します。

var counter = 0

あなただけの変数名を入力し、リターンを押すことでいつでもモンゴシェルでこのカウンタを確認することができます。今

> counter

0

forEach関数を作成し、あなたが行くようにカウンターを繰り返します。

db.questions.find({}).forEach(function(doc){ 
    var = counter + 1; 
    db.questions.update({ _id: doc._id }, { $set: { seqNo: counter }}); 
}) 

それは私が_id: doc._idの更新部分の修飾子が必要なのです実現するために私にいくつかの試みを取りました。それがなければ何も更新されませんでした。

+0

私はあなたがvar seq = 0を意味したと思う –

+0

私は確かに、私はすべての方法をすべての方法を同じvarを使用するように修正しました。それを指摘してくれてありがとう。 – bmcgonag

関連する問題