我正在尝试根据与另一个集合中给定对象的地理接近程度来检索一组mongodb记录。我正在使用蓝鸟来提供承诺。但是,当我的查询嵌套在find的.then子句中时,地理索引搜索失败-它似乎既不会抛出.catch错误,也不会触发代码。
router.post("/alert", function(req, res) {
User.findOneAsync ({'loc.coordinates' : {
$near : {
$geometry : {
type: "Point",
"coordinates" : [45.001,45.001]
},
$maxDistance : 1000000
}
}}).then(function(users) {
console.log("users actually are " + users)
})
Event.findAsync({
_id : req.body.eventId
}).then(function(evt) {
console.log(evt)
User.findAsync({'loc.coordinates' : {
$near : {
$geometry : {
type: "Point",
"coordinates" : [45.001,45.001]
},
$maxDistance : 1000000
}
}}).then(function(users) {
console.log("users are " + users)
}).catch(function(err) {
console.log(err)
})
console.log('done')
}).catch(function(err) {
console.log(err)
})
res.send('ok')
})调用时,直接对用户的第一次查询将会成功。这是我可以在mongodb控制台中运行的相同查询,并获得相同的结果。但是第二个是检索事件,.then(function(evt))块中的任何代码都不会发生,.catch也不会触发。
这是一个比可能的问题更大的问题,因为我需要使用的坐标实际上来自Event模型,所以我需要检索该信息来实际查询Users...
这一行,console.log(evt)确实运行。
发布于 2016-02-17 20:11:07
在Mongoose 4.x中,您可以插入任何promise库供Mongoose使用。我不确定您的findAsync方法是否真的返回了promise,即使它定义了.then()方法。
来自Mongoose文档:
// Use bluebird
mongoose.Promise = require('bluebird');然后,您可以通过调用返回完整蓝鸟承诺的.find(query).exec();来调用任何Mongoose查询。
https://stackoverflow.com/questions/35424904
复制相似问题