将所有文档放在一个数组中

时间:2018-10-02 13:42:45

标签: mongodb

有没有一种方法可以将给定集合的所有文档推送到数组中? 我这样做了,但是有什么更快的方法吗?

var ops = [];
db.getCollection('stock').find({}).forEach(function (stock) {
    ops.push(stock);    
})

PS:我使用的是Mongo 3.4

3 个答案:

答案 0 :(得分:1)

您可以仅在find返回的toArray上使用cursor函数,如下所示:

var ops = db.getCollection('stock').find({}).toArray();

注意:与原始解决方案一样,如果stock集合包含数百万个文档,这可能会降低性能。

顺便说一句,您可以直接使用db.stock来缩短查询时间:

var ops = db.stock.find({}).toArray();

答案 1 :(得分:0)

尝试使用lean查询选项。在您的情况下: db.getCollection('stock').find({}).lean()

答案 2 :(得分:0)

您也可以使用$facet,这将允许您在服务器端创建数组-只要生成的文档数组不大于16MB,在这种情况下,您将得到一个例外:

[\d\%A-Fa-f.]

为了减少返回的数据量,您可以限制上述管道中返回的字段数(而不是空的$match阶段-无论如何都是骇客-您可以使用{{3} }。