2014-10-16 80 views
0
​​

執行沒有失敗,但仍然沒有返回任何東西。我嘗試隔離到期時間和地圖區域部分,但都不起作用。但是,如果我只是做一個find()或將比較改爲$ ne,我就會得到我的結果。 只有一個在我試圖拉測試數據庫對象...爲什麼這個Mongoose查詢不起作用?

"_id" : "543ee4e4e55422ab155f0a44", 
    "name" : "Test Location Space", 
    "img-url" : "http://s3.amazonaws.com/test/test/32098mfsnsdj09w.jpg", 
    "expiry" : "2016-01-17T08:42:12.586Z", 
    "area" : { 
     "min-lat" : 33, 
     "max-lat" : 35, 
     "min-long" : -85, 
     "max-long" : -83 
    } 
+0

將問題隔離爲'{「area.max-lat」:{「$ gte」:latitude}}'還有''expiry':{「$ gt」:Date.now()}' – Yerk 2014-10-16 15:42:50

回答

1

所以這裏的問題是我的錯,代碼大部分是正確的。

首先,latitudelongitude實際上是字符串(由Express的默認中間件解析)。不過無論什麼奇怪的原因,只有max-lat子查詢被字符串類型拋出。評論這將導致查詢返回預期的結果。 我的解決方案就是確保參數確實是一個浮點數。

接下來,我的expiry的日期只是一個字符串,當它真的應該是一個日期類型。我通過Mongoose創建了一個新對象,併爲它提供了一個本地JavaScript日期類型,該類型的存儲時間爲ISODate("2014-10-26T17:57:47.727Z")。我的查詢{ "expiry" : { "$gt" : Date.now() } }現在按預期工作。

1

"expiry" : { "$gt" : Date.now() } 

{ 'expiry' : { $gt : Date.now().toString() }} 

你身邊缺少{}你應該改變並將date.now轉換爲字符串。它適用於我

+0

實際上圍繞該子查詢的大括號,我只是在調試時複製代碼。我試着用你的代碼準確地找到一個簡單的(不是'和'),它仍然不起作用。嘗試更新MongoDB和Mongoose – Yerk 2014-10-16 16:05:31

+0

remove'「expiry」:{「$ gt」:Date.now()},',看看它是否有用,如果它的工作原因是由於時間比較你的查詢不起作用,convert它字符串 – Disposer 2014-10-16 16:09:46

+0

所以日期的東西仍然不工作(toString沒有效果) - 我發現我的地圖區域查詢的問題 - 我的變量實際上是字符串(用節點的身體分析器解析)。由於某種奇怪的原因,只有'max-lat'查詢不起作用... – Yerk 2014-10-16 16:46:16