代码之家  ›  专栏  ›  技术社区  ›  Anna

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

  •  0
  • Anna  · 技术社区  · 6 年前

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

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

    附言:我用蒙古文3.4

    3 回复  |  直到 6 年前
        1
  •  1
  •   Kirk Larkin    6 年前

    你只需使用 toArray 功能上 cursor 从find返回,如下所示:

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

    注意:与原始解决方案一样,如果 stock 集合包含数百万个文档。

    作为旁白,你可以使用 db.stock 直接将查询缩短一点:

    var ops = db.stock.find({}).toArray();
    
        2
  •  0
  •   abdhalees    6 年前

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

        3
  •  0
  •   dnickless    6 年前

    你也可以用 $facet 这将允许您在服务器端创建数组-前提是生成的文档数组不大于16MB,在这种情况下,您将得到一个异常:

    db.stock.aggregate({
        $facet: {
            ops: [ { $match: {} } ]
        }
    })
    

    为了减少返回的数据量,可以限制上述管道中返回字段的数量(而不是空的 $match 舞台-不管怎样,这是一个黑客-然后你会使用 $project )