从Model.findOne返回一个数组?

时间:2016-07-28 10:39:11

标签: mongodb mongoose

我有一个查询,它将一组文档作为一个承诺(.exec)返回 此外,我有一个(承诺)函数,它也返回一个数组。两者都在Promise.all中合并。

现在我想将.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>) => {....}

1 个答案:

答案 0 :(得分: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