首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌套时mongoose地理索引失败

嵌套时mongoose地理索引失败
EN

Stack Overflow用户
提问于 2016-02-16 14:00:24
回答 1查看 66关注 0票数 0

我正在尝试根据与另一个集合中给定对象的地理接近程度来检索一组mongodb记录。我正在使用蓝鸟来提供承诺。但是,当我的查询嵌套在find的.then子句中时,地理索引搜索失败-它似乎既不会抛出.catch错误,也不会触发代码。

代码语言:javascript
复制
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)确实运行。

EN

回答 1

Stack Overflow用户

发布于 2016-02-17 20:11:07

在Mongoose 4.x中,您可以插入任何promise库供Mongoose使用。我不确定您的findAsync方法是否真的返回了promise,即使它定义了.then()方法。

来自Mongoose文档:

代码语言:javascript
复制
 // Use bluebird
 mongoose.Promise = require('bluebird');

然后,您可以通过调用返回完整蓝鸟承诺的.find(query).exec();来调用任何Mongoose查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35424904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档