我在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
返回这些对象。这通常是在前端还是后端完成的?
答案 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
希望有所帮助。