繁体   English   中英

在MEAN Stack中使用MongoDB填充一对多关系

[英]Populating one-to-many relationships with MongoDB in 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返回那些对象。 这通常在前端还是后端完成?

是的,您通常会使用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查询联接..但是我来自sql背景

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM