2015-11-23 99 views
1

這一定是一個愚蠢的問題,但我已將我的頭靠在牆上足夠長時間。.findOne未將結果傳遞給回調

簡短版本:我有一個查詢在Mongo控制檯中按預期返回結果,但在通過Mongo NodeJS包使用時不返回任何結果(或錯誤)。

var weatherCacheQuery = { 
    'location': { 
     '$near': { 
      '$geometry': { 
       type: 'Point', 
       coordinates: [location.coordinates[0], location.coordinates[1]] 
      }, 
      '$maxDistance': 50000 
     } 
    }, 
    'retrieved': { 
     '$gte': moment().subtract(2, 'hours').toDate() 
    } 
}; 
this.db.collection('weather').findOne(
    weatherCacheQuery, 
    function(err, doc) { 
     console.log(JSON.stringify(err)); 
     console.log(JSON.stringify(doc)); 
    } 
}); 

正如你所看到的,沒有什麼過於複雜。

如果我轉儲查詢對象並將其粘貼到Mongo控制檯的findOne查詢中,它將返回一個與查看應該完全一致的單個結果。但在JS中,兩個console.log()返回null。

更奇怪的是,用相同的查詢查找()確實返回一個結果,但沒有一個我可以查看,因爲JSON.stringify()抱怨它是循環的。

任何人都可以指出我做錯的無疑荒謬的事情嗎?

+0

您使用Node MongoDB驅動程序2.0嗎? –

+0

如果你設置'weatherCacheQuery = {}',你會得到任何輸出嗎? – Jaco

+0

@ExplosionPills - package.json顯示^ 2.0.45。 – user1381745

回答

1

.findOne對於節點MongoDB驅動程序有三個參數,它們都不是可選的。嘗試:

this.db.collection('weather').findOne(
    weatherCacheQuery, {}, 
    function(err, doc) { 
     console.log(JSON.stringify(err)); 
     console.log(JSON.stringify(doc)); 
    } 
}); 

您還可以使用一個承諾,鏈.then.findOne嘗試和回調傳遞給。

該文檔還指出.findOne已被棄用和使用。

find().limit(1).next 

您可以將回調傳遞給該回調。

+0

find()。limit(1).next工作,謝謝! – user1381745