2016-07-28 70 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]。我不確定,但你可以試試這個

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