2012-08-15 27 views
1

我有這樣的MongoDB組通過查詢從蒙戈控制檯的偉大工程:MongoDB的查詢:訂單和導出結果

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包含我的分組查詢。 output.txt顯然是輸出寫入的地方。

回答

0
  1. 可以使用JS Date對象(http://www.w3schools.com/js/js_obj_date.asp),它不支持但這個日期記法,你做它通常是爲了使日期,ISO約會總是這就是爲什麼蒙戈從改變更好的最佳途徑的方式正常Date反對這些約在v1.6或8(現在不記得:\)。

  2. 由於組返​​回一個BSON文檔(這意味着結果不能超過16meg),您將不得不對它們進行客戶端排序。更正:您無法對傳入的查詢進行排序,因爲它是我剛纔意識到的單個對象。所以這是一個客戶端的事情。雖然你可以做到這一點,如果你使用MR(我認爲)。

  3. 只需將返回的結構寫入平面文件即可。這是一個單獨的文檔,我不知道你希望如何格式化結果到平面文件或你想要處理它的語言,但是通常你會從例如PHP(例如)中激發組命令並且繼續工作它在那裏。這些語言更容易。

注:組()不與分片也是聚合框架(http://docs.mongodb.org/manual/applications/aggregation/)的工作將非常替換這個我想。

+0

注意:我正在通過客戶端執行這些操作。所以我正在尋找如何從命令行執行#2和#3,如果可能的話。當然,我可以編寫一個腳本來做我想做的所有事情,但我期待看看是否有方法直接從CLI執行此操作。 – doremi 2012-08-15 20:37:24

+0

@doremi對於#3我不相信JS引擎(spidermonkey)有一個寫入文件模塊,最近我發現是https://developer.mozilla.org/en-US/docs/SpiderMonkey/File_object,它是非標準的,所以它可能不在那裏。 – Sammaye 2012-08-15 20:41:01

+0

@doremi#2如何尋找排序?我可以使用JS來構建一個可以使用的快速排序功能,但這取決於你想如何排序。 – Sammaye 2012-08-15 20:42:27