2016-07-14 2 views
1

私はコレクションからすべての無効なドキュメントを削除するクレンジング機能を書いています。このため私は無効な_id値を配列変数にプッシュし、$ inで削除する考えがあります。mongodb値を配列変数にプッシュ

function(scan){ 
var err 
for(var n=1;n<scan;n++){ 
var doc = db.zeroDimFacts.findOne({_id:n}) ,nKeys =0; 
for(k in doc) 
    nKeys++ 
if(nKeys <5) 
    err = n.toArray() 
} 

すべての値をerr配列にプッシュした後、一致するドキュメントを削除するスクリプトがあります。しかし、n.toArray()に私のエラーを投げるコードには何かがありません。
誰かがコードを修正する手伝いをしてくれますか?

+0

無効なドキュメントを見つけるための「条件」は何ですか? –

+0

問題文に記載されているとおり、基準は無効なドキュメントを削除することです。 –

+0

無効なドキュメントは何ですか?あなたがそれを説明するなら、誰かがあなたが基準でそれを行うのを助けることができます。 –

答えて

1
function(scan) { 
    var doc; 
    var nKeys; 
    var err = []; 

    for(var n = 1; n < scan; ++ n) { 
     doc = db.zeroDimFacts.findOne({_id: n}) 
     nKeys = 0; 

     for(k in doc) { 
      ++ nKeys; 
     } 
     if(nKeys < 5) { 
      err.push(n); 
     } 
    } 
    return err; 
}; 

findOne()呼び出しに注意してください。それがnullを返すとき、nは私に望ましくないような配列に入ります。

1

findByIdAndRemove({criteria})を使用することができ、戻り値によってロジックを持つことができます。

+0

こんにちは、私はmongooseに取り組んでいません。私はmongodbの中に関数を書いています。 –

+0

findOneAndDeleteヘルプがあります:https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndDelete/ – npr

+0

これについてはわかりませんが、一般的なシナリオで役立つかもしれませんが、非常に成功した反復では、数百万のドキュメントを持つコレクションにはもっと時間がかかるでしょう。 これは、まず無効なドキュメントのIDをすべて収集してから、一度にそれらを削除するように選択した理由です。 –

関連する問題