返回多个收集数据MongoDB

时间:2019-01-19 13:34:51

标签: mongodb

我已经创建了一个用户个人资料页面,该页面旨在链接到用户创建的任何记录,包括艺术家和场地(以及其他)。以下针对Artists的代码按预期工作;该用户创建的艺术家个人资料会在其个人资料下方显示为超链接。同样,如果我使用相同的代码切换出“演出场所艺术家”,它也会返回正确的结果。

//USER PROFILES
    app.get("/users/:id", function(req, res){
        User.findById(req.params.id, function(err, foundUser){
            if (err) {
                console.log(err);
                res.redirect("back");
            }
            Artist.find().where('author.id').equals(foundUser._id).exec(function(err, artists){
                if (err) {
                    console.log(err);
                    res.redirect("back");
                }
            res.render("users/show", {user: foundUser, artists: artists});
            });
        });
    });

但是,我要在个人资料页面上同时返回 艺术家和场地。我不知道该怎么做。使用下面的代码,我得到一个错误的“未定义的地点”。浏览其他问题似乎表明实际上不可能找到多个集合,但是我对MongoDB(以及一般而言)很陌生,并且不确定我是否正确理解了这一点。从表面上看,我本以为这应该很简单,所以不确定该错误是否仅与语法或代码顺序有关。

谢谢。

//USER PROFILES
app.get("/users/:id", function(req, res){
    User.findById(req.params.id, function(err, foundUser){
        if (err) {
            console.log(err);
            res.redirect("back");
        }
        Artist.find().where('author.id').equals(foundUser._id).exec(function(err, artists){
            if (err) {
                console.log(err);
                res.redirect("back");
            }
        res.render("users/show", {user: foundUser, artists: artists});
        });
        Venue.find().where('author.id').equals(foundUser._id).exec(function(err, venues){
            if (err) {
                console.log(err);
                res.redirect("back");
            }
        res.render("users/show", {user: foundUser, venues: venues});
        });
    });
});

1 个答案:

答案 0 :(得分:1)

要查找场地和艺术家,您必须在艺术家功能之后放置场地查找功能 因为通常在节点js中,我们使用异步代码,所以在执行第一个艺术家查找功能后,页面将呈现艺术家数据并完成响应,因此第二个函数将不会执行 看到这个

app.get("/users/:id", function (req, res) {
    User.findById(req.params.id, function (err, foundUser) {
        if (err) {
            console.log(err);
            res.redirect("back");
        }
        Artist.find().where('author.id').equals(foundUser._id).exec(function (err, artists) {
            Venue.find().where('author.id').equals(foundUser._id).exec(function (err, venues) {
                if (err) {
                    console.log(err);
                    res.redirect("back");
                } else
                    res.render("users/show", {
                        user: foundUser,
                        venues: venues,
                        artists: artists
                    });
            })
        });

    });
});

我希望这个答案对您有帮助

相关问题