我有一个查询,它将一组文档作为一个承诺(.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>) => {....}
答案 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