我创建了一个node.js模块,该模块已经可以使用find查询MongoDB以获取一组文档,并将这些结果输出到JSON。我的问题是,知道node.js是异步的,我如何使用此查询(项)的结果创建一个返回MongoDB查找另一组文档的查询。此查询基本上返回一个员工ID列表,可用于查询包含这些员工信息的文档(即firstName,lastName等)。然后将这些结果输出为JSON。第一个查询基本上是说,给我所有可以被特定用户查看的员工。然后,我需要获取员工ID并对另一组包含这些个人信息的文档进行查询,如下所示。
以下是两个文件架构:
员工
{
"_id" : ObjectId("5208db78ecc00915e0900699"),
"clientId" : 1,
"employeeId" : "12345",
"lastName" : "DOE",
"firstName" : "JOHN",
"middleName" : "A",
"badge" : "8675309",
"birthDate" : "10/12/1978"
}
员工可以访问的用户(用户缓存)
{
"_id" : ObjectId("520920a99bc417b7c5e36abf"),
"clientSystem" : "SystemX",
"customerNumber" : "1",
"clientUserId" : "jdoe3",
"securityCode" : "authorize",
"employeeId" : "12345",
"creationDate" : "2013-Aug-12 13:51:37"
}
这是我的代码:
exports.employeeList = function(req, res) {
console.log(req.params);
var clientSystem = req.query["clientSystem"];
var clientUserId = req.query["clientUserId"];
var customerNumber = req.query["customerNumber"];
var securityCode = req.query["securityCode"];
if (clientSystem != null && clientUserId != null && customerNumber != null && securityCode != null){
db.collection('ExtEmployeeList', function(err, collection){
collection.find({'clientSystem': clientSystem, 'clientUserId':clientUserId, 'customerNumber':customerNumber, 'securityCode': securityCode}).toArray(function (err, items){
console.log(items);
res.jsonp(items);
});//close find
});//close collection
}//close if
else {
res.send(400);
}//close else
};//close function
答案 0 :(得分:2)
你想做的事情是可能的,但可能不是Mongo最有效的用法。我倾向于设计关于如何实际使用数据的Mongo文档。因此,如果我需要用户的名字显示在我可以查看的用户列表中,我会嵌入该数据,因此我不必多次往mongo进行往返以获取我需要的所有信息。我会做类似以下的事情:
{
"_id" : ObjectId("520920a99bc417b7c5e36abf"),
"clientSystem" : "SystemX",
"customerNumber" : "1",
"clientUserId" : "jdoe3",
"securityCode" : "authorize",
"employeeId" : "12345",
"creationDate" : "2013-Aug-12 13:51:37"
"employee": {
"_id" : ObjectId("5208db78ecc00915e0900699"),
"clientId" : 1,
"employeeId" : "12345",
"lastName" : "DOE",
"firstName" : "JOHN",
"middleName" : "A",
"badge" : "8675309",
"birthDate" : "10/12/1978"
}
}
是的,您正在复制数据,但是您大大减少了到数据库的往返次数。这通常是您在使用基于文档的数据库时所做的权衡,因为您无法连接表。