2016-07-28 5 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 
Смежные вопросы