2017-10-25 7 views
0

シェルモンゴでスムーズに実行私は間違いや愚かな質問のための私を許してください、ビットMongoDBのために新しいとJavaScript午前:モンゴDBクエリが、

私はにログインJavaScriptを作成しました複数のクエリを実行しますが、スクリプトはデータベースへのログインまでは正常に実行されていますが、クエリの実行には失敗します。

以下

エラーです:

$ node Test_Script.js 
Successfully Connected to Database 
{ MongoError: $in needs an array 
at Function.MongoError.create (C:\PROJECT\DOCS\Requirements Documents\User 
Stories\CPQ\1125\node_modules\mongodb-core\lib\error.js:31:11) 
at queryCallback (C:\PROJECT\DOCS\Requirements Documents\User 
Stories\CPQ\1125\node_modules\mongodb-core\lib\cursor.js:212:36) 
at C:\PROJECT\DOCS\Requirements Documents\User 
Stories\CPQ\1125\node_modules\mongodb-core\lib\connection\pool.js:469:18 
at _combinedTickCallback (internal/process/next_tick.js:73:7) 
at process._tickCallback (internal/process/next_tick.js:104:9) 
name: 'MongoError', 
message: '$in needs an array', 
ok: 0, 
errmsg: '$in needs an array', 
code: 2, 
codeName: 'BadValue' } 

しかし、私はモンゴシェルで同じクエリを実行したとき、私は出力を取得していますが、私はそれが失敗したJavaScriptで実行したとき、私はそれが値で$を期待していることを理解し私は修正しようとしたが、失敗した配列として。

以下

はクエリです:私はQuoteId変数」で配列されたクエリの出力を格納し、その後の状態で$でそれを置くが、それは動作しませんしています

を編集

var QuoteId = collectionA.distinct('QuoteId'); 


var query = {$and: [{"created" : {$lte: new Date(new Date().setDate(new 
Date().getDate()- 40))}}, {"id": {$in:QuoteId}}]} 
//var purgeDays = 
db.collection('SCPQ_QuoteCleanup_Config).distinct("PurgeDays") 



collection.find(query).toArray((err, doc) => { 
+0

使用し、サーバー側のLANを返します。 NodeJSのようなゲージ –

+0

私はNodeJsを使用していますが、何が間違っているのか分かりません。 –

答えて

0
。このクエリを試してみてください

var query = {$and: [{"created" : {$lte: new Date(new Date().setDate(new 
Date().getDate()- 40))}}, {"id": {$in:[QuoteId]}}]} 

編集

明確な方法は、実際に明確なQuoteIdsに

を返すために、コールバックを必要とするため問題はこの試みるvar QuoteId = collectionA.distinct('QuoteId');である:Nodejsは自然collectionA.distinct(「QuoteId」)で非同期であるため、これは

collectionA.distinct('QuoteId', (err, res) => { 
    if (err) { 
     // register error 
    } else { 
     var QuoteId = res; 
     var query = {$and: [{"created" : {$lte: new Date(new Date().setDate(new 
     Date().getDate()- 40))}}, {"id": {$in:QuoteId}}]} 
     // put your code here 
    } 
}); 

をしますすぐに結果を返していない、それはcallback(上記のように)必要があります。いずれかまたはPromiseオブジェクト

MongoDB nodejs driver For reference

+0

試しましたが、何も返されません。しかし、私は直接mongoシェルに私は出力を得ている下のクエリをしようとしているとき。 (新しい日付()。getDate() - $ purgeDays))}}、{{{{{}}} { "id": {$ in:db.VFEO_SCPQ_ESB_QuoteSubmit.distinct( "QuoteId")}}}) –

+0

は、 '配列'または 'オブジェクト'の 'QuoteId'ですか? –

+0

それはアレイ、例えば以下である: [ 'd0ca0b14-1606-46f1-9035-8335031abd99' 'd36983ba-a51a-4e75-80f0-790e73314b37' 'e9940359-5122-43bb-a1bf-8fb890849bb2'、 'ecf11002-d605-48a0-97cc-829431826d80'] –