2011-08-09 29 views
31

我試圖使用mongodump命令來轉儲出在特定日期創建的一堆記錄。記錄包括一個「ts」字段,它是一個MongoDB Date()對象。如何使用mongodump轉儲符合特定日期範圍的記錄?

mongodump需要一個-q參數,它可用於運行查詢以選擇要包含在轉儲中的記錄。不幸的是,需要以JSON提供-q參數,並且不清楚如何在純JSON中表示「不及今天,超過此日期」的查詢(通常這樣的查詢會使用' ?新的Date()構造函數)」

任何提示我已經使用{$日期:UNIX時間戳功能於毫秒}嘗試。格式,但它不是爲我工作

回答

4

這應該工作,是什麼關於你的$日期查詢沒有工作:

mongodump --query {"ts":{$gt:{$date:178929000}}} 
39

我解決了它 - 魔法咒語我一直在尋找的是:

mongodump --query "{\"ts\":{\"\$gt\":{\"\$date\":`date -d 2011-08-10 +%s`000},\"\$lte\":{\"\$date\":`date -d 2011-08-11 +%s`000}}}" 
+2

不要害怕接受這個答案,爲我工作 - 沒有意識到我不得不擺脫美元的跡象。 – kmfk

+0

是否有文檔在某處用於您在此處使用的JSON格式日期?什麼是'\'日期-d 2011-08-10 +%s \'000'所有關於? – ericsoco

+0

@ericsoco看起來像他正在運行一個shell命令來生成日期 – colllin

20

更可讀的版本比@ SimonWillison,轉義版本:(注意dollarsigns仍需要進行轉義)

--query "{ time: { \$gt: new Date(1312959600000), \$lt: new Date(1313046000000) }}"

我創建的日期得到毫秒時間戳shell,例如:

> var targetDateStart = new Date(2011, 7, 10); 
> var targetDateEnd = new Date(2011, 7, 11); 
> targetDateStart.getTime(); 
1312959600000 
> targetDateEnd.getTime(); 
1313046000000 
+4

如果您使用單引號'''',則不需要'$'轉義。事實上,這是推薦的方式,''{時間:{$ gt:新日期(1312959600000),$ lt:新日期(1313046000000)}}'' –

2

圍繞查詢使用單引號。我發現ISODate()不起作用。

mongodump --query '{"ts":{$gt:{$date:178929000}}}' 
6

編輯:固定的拼寫錯誤

添加更新:

  1. mongodump --query不支持IsoDate,但以毫秒爲單位的形式接受Date

  2. 由於date命令在OS X中表現不同,date -d 2011-08-10 +%s對我不起作用。如果你遇到同樣的問題,嘗試閱讀手冊或使用本:

    • 獲取當前時間(秒):

      date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s" 
      
    • 獲取特定的時間(秒):

      date -j -f "%Y-%m-%d %H:%M:%S" "2014-01-01 00:00:00" "+%s" 
      
  3. 使用單引號版本以避免轉義。

    mongodump --query '{updated_at: { $gte: Date(1403280000000) } }' 
    
+0

第一條命令''\'\'失敗轉換2015年9月15日10 :49:19 CEST''使用格式\'\'%a%b%d%T%Z%Y'''第二個命令給我和javascript' Date.UTC(...)/ 1000'相同,但是不同從'ISODate(...)。getTime()/ 1000'(因爲我在法國2小時) – Rivenfall

+0

它缺少一個支架。正確的語法是: 'mongodump --query'{updated_at:{$ gte:Date(1403280000000)}}'' – miduga

8

在MongoDB中3.2,我們可以使用--queryFile選項與mongodump。

首先,創建一個JSON文件:

//query.json 
{"serverTime": {"$gte": ISODate("2016-01-30T16:00:00.000Z"), "$lt": ISODate("2016-01-31T16:00:00.000Z")}} 

接下來,使用mongodump:

mongodump --db <dbName> --collection <collectionName> --queryFile query.json 

簡單明瞭。

+2

不適用於ISODate – dtc