2

javascript(mongoDBに関する)がmongoDBプロセスの実行を待つかどうかを自問しました。

例えば:

のようなドキュメントを挿入しています

for (i=0; i<=myarray.length -1; i++)
{
        db.mycol.insert(myarray[i]);
}

その直後にcolステータスを確認すると、db内のいくつかのドキュメントまたは0のみが表示されます(たとえば、100ではなく29または0のみ)。たとえばsleep(10000)を使用してsleep()関数を実行すると、挿入された可能性のあるすべてのドキュメントを確認できます。

だから私の質問は、javascriptが完全な挿入を待つことをどのように確認できますか?または、どうすればそれを測定できますか?現時点で使用しています

start = new Date().getTime();

for (i=0; i<=myarray.length -1; i++)
{
        db.mycol.insert(myarray[i]);
}
end = new Date().getTime();
time = end - start;

しかし、挿入プロセスが完了していない場合、その関数の測定は私には無意味に思えます。

編集:

を使用してdb.getLastError({w:1});

次のエラーが発生します:

キャッチされない例外:getlasterrorが失敗しました:{"singleShard": "replica2 / ip:port、ip:port"、 "n":0、 "lastOp":NumberLong( "5824731790958395692")、 "connectionId":111744、 "assertion": "フィールド(w)3のタイプが間違っています!= 2"、 "assertionCode":13111、 "errmsg": "dbアサーションの失敗"、 "ok":0}の読み込みに失敗しました:... myscript.js

4

2 に答える 2

1

MongoDBがデータを書き込むまで待ちたい場合は、待ちたいgetLastErrorオプションを指定して呼び出すことができます。

このような:

start = new Date().getTime();
for (i=0; i<=myarray.length -1; i++) {
    db.mycol.insert(myarray[i]);
}
db.getLastError({w:1});
end = new Date().getTime();
time = end - start;
于 2012-12-11T23:18:55.460 に答える
1

これを試して:db.getLastError({w: majority});

于 2012-12-22T11:49:53.397 に答える