MongoDB Querying: Order & Export Results

MongoDB Querying: Order & Export Results

本文关键字:Export Results amp Querying Order MongoDB      更新时间:2023-09-26

我有这个MongoDB分组查询,它在Mongo控制台上效果很好:

db.accounts.group(
   { cond: { "created_at" : { $gte: ISODate("2012-08-12T00:00:00Z") }}
   , key: {member_id: true}
   , initial: {count: 0, failed: 0, succeeded: 0}
   , reduce: function(doc, out) { 
        out.count++; 
        if (!doc.success)
            out.failed++
        else
            out.succeeded++
    }
   });

我的三个问题:

  • 有没有更简单的方法来生成此时间戳:ISODate("2012-08-12T00:00:00Z")?我可以使用日期函数生成此时间戳吗?如果是这样,如何?
  • 如何按分组字段对返回的结果进行排序(asc/desc):"失败"或"成功"?
  • 最后,如何将输出导出到平面文件?

更新

对于#3,我基本上在寻找这个:

mongo my_db --eval 'some_var=X;' --quiet my_script.js >> output.txt

其中my_db是我正在使用的数据库,some_var是我传递给my_script.js的变量,其中包含我的分组依据查询。 输出.txt显然是写入输出的地方。

  1. 您可以使用 JS Date 对象( http://www.w3schools.com/js/js_obj_date.asp ),它确实支持这种日期表示法,但是您这样做的方式通常是制作日期的最佳方式,ISO 日期总是更好,这就是为什么 Mongo 在大约 v1.6 或 8 中从普通的Date对象更改为这些(现在不记得了:')。

  2. 由于 group 返回单个 BSON 文档(这意味着结果不能大于 16meg),因此您必须对它们进行客户端排序。更正:您无法对传入的查询进行排序,因为我刚刚意识到它是一个对象。所以这是一个客户端的事情。虽然如果你使用 MR,你可以这样做(我认为)。

  3. 只需将返回的结构写入平面文件即可。这是一个单一的文档,我不知道您希望如何将结果格式化为平面文件或您希望用哪种语言处理它,但是通常您会从(例如)PHP 触发组命令并在那里处理它。在这些语言中更容易。

注意:Group() 不适用于分片,我认为聚合框架 (http://docs.mongodb.org/manual/applications/aggregation/) 几乎会取代它。