2016-07-28 2 views
0

私は、ドキュメントの配列を約束(.exec)として返すクエリを持っています。
さらに、配列を返す(約束された)関数を持っています。両方ともPromise.allで結合されています。Model.findOneから配列を返しますか?

フィルタを高速化するために、.find.findOneに移動します。しかし、findOneと私は配列を戻すことはありません。だから私は使用することを決めた.find().limit(1)

私の質問は、これは有効なアプローチではなく、.findOneを使用するのではなく、そうでない場合です:findOneの結果を配列として返す簡単な方法はありますか?たぶん.leanと?

var query = Model.find({ $and: [ { _id: id }, 
           { $or: [ { owner: userID }, 
              { isPublic: true } ]} 
          ]}).limit(1); 

Promise.all([query.exec(), this._sources(user)]).then((doc: Array<any>) => {....} 
+0

これは役立つかどうかわかりません。 [toArray()](https://docs.mongodb.com/manual/reference/method/cursor.toArray/)を使ってみましたか? – Shrabanee

答えて

0

findOneは、配列ではなくオブジェクトを返します。次のような結果を持つ配列を作成することができます:return [obj]。私は分かりませんが、この1つを試すことができます

var queryResult = Model.findOne({ $and: [ { _id: id }, 
        { $or: [ { owner: userID },{ isPublic: true } ]}]}) 
       .exec(function(err, data){ 
         if(err) return [];       
         return [data]; 
        }); 

Promise.all([queryResult, this._sources(user)]).then 
関連する問題