2017-04-15 7 views
2

私のテストスイートでは、データベースにテスト情報をバルク書き込みし、テスト中に入力されたテスト情報を一掃してクリーンスレートに戻したいとします。私はnodeJSのrequireステートメントを介してロードされたJSONファイルの内容を渡すdb上でbulkWriteを実行することでそうします。Mongoose bulkWrite - 'q'のタイプが間違っています

{ MongoError: Wrong type for 'q'. Expected a object, got a null. 
    at Function.MongoError.create (/var/www/website/server/node_modules/mongodb-core/lib/error.js:31:11) 
    at /var/www/website/server/node_modules/mongodb-core/lib/connection/pool.js:483:72 
    at authenticateStragglers (/var/www/website/server/node_modules/mongodb-core/lib/connection/pool.js:429:16) 
    at Connection.messageHandler (/var/www/website/server/node_modules/mongodb-core/lib/connection/pool.js:463:5) 
    at Socket.<anonymous> (/var/www/website/server/node_modules/mongodb-core/lib/connection/connection.js:339:20) 
    at emitOne (events.js:96:13) 
    at Socket.emit (events.js:188:7) 
    at readableAddChunk (_stream_readable.js:176:18) 
    at Socket.Readable.push (_stream_readable.js:134:10) 
    at TCP.onread (net.js:548:20) 
    name: 'MongoError', 
    message: 'Wrong type for \'q\'. Expected a object, got a null.', 
    ok: 0, 
    errmsg: 'Wrong type for \'q\'. Expected a object, got a null.', 
    code: 14, 
    codeName: 'TypeMismatch' } 

問題は鍵が興味や行動のモデルの名前ですmodels[key].collection.bulkWrite(action[key])、に渡されたデータセット

[ { deleteOne: { username: 'test-author' } } ] 

のために、私は次のエラーを取得する、JSONファイルであるということです

私はいくつかの調査を行い、この問題の解決策を見つけることができませんでした。エラー自体は無意味なので、私はそれの多くを把握することはできません。どのように問題を解決するための任意のアイデア?

ご協力いただければ幸いです! 乾杯! MongoDB API 1として

+0

jsonファイルにはモデル名がないため、null値がスローされます。 –

+0

問題を再現するためにいくつかのサンプルデータを投稿することができます –

+0

@ KARTHIKEYAN.A:モデル名を渡す必要がありますか?原因は最終的に 'models [key] .collection.bulkWrite(action [key])'の呼び出しが 'Author.collection.bulkWrite(action.Author)'に解決されるため、コレクションの作成者がScopeされていると思われます –

答えて

2

deleteOnedeleteManyupdateOneupdateManyreplaceOne、及びreplaceMany操作は、クエリのフィルタとして作用する性質filterを有することが必要となります。

Character.bulkWrite([ 
    ... 
    { 
    deleteOne: { 
     { name: 'Eddard Stark' } 
    } 
    } 
]).then(handleResult); 

したがって、からの変化を介して送信されるデータ:

[{ 
    "deleteOne": { "username": "test-author" } 
}] 

[{ 
    "deleteOne": { "filter": { "username": "test-author" }} 
}] 

には、私が確認してくださいよしかし

Mongoose's APIは、以下の(誤解)の例を示していますメッセージをmongoosejs devグループに渡します。

+0

ここに記載https://github.com/Automattic/mongoose/issues/5168 –