在MEAN Stack中填充与MongoDB的一对多关系

时间:2015-08-16 20:19:04

标签: javascript mongodb mean-stack

我在MongoDB Docs中关注了这篇文章,并创建了类似的一对多关系,仅引用了"发布商"通过孩子的id值。数据结构如下,publisher_id是这里的工作:

{
   _id: 123456789,
   title: "MongoDB: The Definitive Guide",
   author: [ "Kristina Chodorow", "Mike Dirolf" ],
   published_date: ISODate("2010-09-24"),
   pages: 216,
   language: "English",
   publisher_id: "oreilly"
}

{
   _id: 234567890,
   title: "50 Tips and Tricks for MongoDB Developer",
   author: "Kristina Chodorow",
   published_date: ISODate("2011-05-06"),
   pages: 68,
   language: "English",
   publisher_id: "oreilly"
}

如果我有一个页面,例如,使用所有 O' Reilly书籍,我该如何使用正确的publisher_id返回这些对象。这通常是在前端还是后端完成的?

1 个答案:

答案 0 :(得分:0)

是的,您通常会使用Mongoose中间件查询后端(node.js)上的Mongo数据库。您也可以使用MongoDB插件。您可以通过http调用从Angular前端发送查询,该节点将路由到服务器端控制器。您的服务器端book.controller文件如下所示:

var mongoose = require('mongoose'),
Books = mongoose.model('Books')

exports.findBooks = function(req,res){
    var query = {publisher_id:req.body.publisherName};
    Books.find(query,function(err,bookResults){
        if (err){
            return res.status(400).send({message: err})
        } else {
            res.status(200).send({books: bookResults});
        }
    })
};

您的node.js路由可能如下所示:

 var controller = require('./controllers/book.controller.js'),
        express = require('express'),
        app = express(),
        router = express.Router();

 router.post('/find/books',controller.findBooks);

您的Angular前端文件将进行如下调用:

$http.post('/find/books',{publisherName: $scope.publisher})
        .success(function(res){
            //handle data received
        })

这是对数据的基本查询的答案,它假定用户知道前端的发布者ID是什么。您可以在页面加载时查询发布者ID和名称列表,让他们从下拉列表中进行选择,然后运行此查询。 如果你正在寻找连接,比如两个表的SQL连接,我会看看这个答案:Mongoose/mongoDB query joins.. but I come from a sql background

希望有所帮助。