2015-05-21 68 views
1

下面的查詢不給我任何結果,儘管有幾個字段與地理位置和時間戳相匹配。

我試過將$gt更改爲$ne,它返回所有$value的總和。

我甚至試過檢查timeStamp大於0.仍然沒有結果。這裏的時間戳是一個雙數據類型。

db.csv2.aggregate([{ 
    $match: { 
     $and: [{ 
      loc: { 
       $geoWithin: { 
        $box: [ 
         [-128.232422, 26.382028], 
         [-109.6875, 43.624147] 
        ] 
       } 
      } 
     }, { 
      timeStamp: { 
       $gt: 1432201420790 
      } 
     }] 
    } 
}, { 
    $group: { 
     _id: null, 
     total: { 
      $sum: "$value" 
     } 
    } 
}]); 
+2

執行領域同時匹配'loc' *和*'timeStamp',不只是一個或其他?你可以在不指定'loc'的情況下匹配'timestamp' *嗎?你在這裏不需要'$和';只需要'$ match:{loc:{...},timeStamp:{...}}'就可以實現。 – zamnuts

+1

通過匹配,你的意思是如果條件匹配。如果是這樣,是的...祿與給定的座標和時間戳大於該範圍有結果。 我試着用$運行它,它會拋出一個語法錯誤。 – Aravindh

回答

2

給出的錯誤是明確的。閱讀文檔,看看如何實現$ GT聚合函數:documentation

基本上,條件是數組

{ $gt: ["$timeStamp", 1432201420790] } 

[編輯] 您的問題可能來自於語法與美元符號在代碼中缺少的時間戳字段之前。試試這個

{ $gt: ["$timeStamp", 1432201420790] } 

,而不是

{ timeStamp: { $gt: 1432201420790 }} 
+1

請注意,常規和聚合查詢的'$ gt'運算符的語法不同。 – bagrat

+0

Gook的話。這裏是一個聚合查詢:) – GuillaumeA

+0

我已經做了相當多的研究。仍然無法修復它。我的基本需求是匹配2個條件並將結果分組以完成總和操作。 在2個條件之一中,它檢查特定字段是否大於給定數字。 ( – Aravindh