MongoDB查询:订单&出口结果

时间:2012-08-15 19:13:39

标签: javascript mongodb

我有一个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):“failed”或“succeeded”?
  • 最后,我如何将输出导出到平面文件?

更新

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

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

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

1 个答案:

答案 0 :(得分:0)

  1. 您可以使用支持此日期表示法的JS Date对象(http://www.w3schools.com/js/js_obj_date.asp),但是您完成它的方式通常是制作日期的最佳方式,ISO日期始终是更好的是,为什么Mongo从普通Date对象变为大约v1.6或8(现在不记得:\)。

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

  3. 只需将返回的结构写入平面文件即可。它是一个单独的文档,我不知道你希望如何将结果格式化为平面文件或者你想要处理它的语言,但是通常你会从例如PHP(例如)PHP中激活group命令并继续工作它在那里。这种语言更容易。

  4. 注意:Group()不支持分片,聚合框架(http://docs.mongodb.org/manual/applications/aggregation/)几乎可以取代我的想法。