Javascript 在MongoDB中获取查询外部的数据
我在做一个购物车,为了乘以数量,我必须得到产品的价格,但我有异步的问题,我不能在循环的每个迭代中得到价格Javascript 在MongoDB中获取查询外部的数据,javascript,node.js,mongodb,callback,Javascript,Node.js,Mongodb,Callback,我在做一个购物车,为了乘以数量,我必须得到产品的价格,但我有异步的问题,我不能在循环的每个迭代中得到价格 router.get('/cartlist',函数(req,res){ var db=请求db; var collection=db.get('cart'); collection.find({},{},函数(e,docs){ var totalPrice=0; 用于(单据中的var i) { var name=docs[i].productname; var金额=单据[i]。金额; va
router.get('/cartlist',函数(req,res){
var db=请求db;
var collection=db.get('cart');
collection.find({},{},函数(e,docs){
var totalPrice=0;
用于(单据中的var i)
{
var name=docs[i].productname;
var金额=单据[i]。金额;
var products=db.get('products');
var=0;
getPrice(产品、名称、功能(数据)
{
idPrice=数据;
});
控制台日志(idPrice);
}
总价+=idPrice*金额;
控制台日志(总价);
res.render('cartlist'{
“cartlist”:文档
});
});
});代码>假设您的购物车和产品集合具有以下最低架构:
购物车
- productname (reference to product collection on productname field)
- amount
- productname
- price
产品
- productname (reference to product collection on productname field)
- amount
- productname
- price
然后,使用聚合框架并运行一个管道,让操作符执行到同一数据库中的产品
集合的左外部联接,以从“联接”中筛选文档,这将更加容易和高效收集以进行处理,然后使用和运算符计算管道中的总价
下面的示例显示了如何进行此操作
router.get('/cartlist', function(req, res) {
var db = req.db;
var collection = db.get('cart');
collection.aggregate([
{
"$lookup": {
"from": "products",
"foreignField": "productname",
"localField": "productname",
"as": "productList"
}
},
{ "$unwind": "$productList" },
{
"$group": {
"_id": null,
"totalPrice": {
"$sum": {
"$multiply": [
"$productList.price",
"$amount"
]
}
},
"cartlist": { "$push": "$$ROOT" }
}
}
], function(err, result){
console.log(result);
console.log(result[0]);
console.log(result[0].totalPrice);
res.render("cartlist", result);
});
});
您能否编辑您的问题以显示购物车
和产品
集合中的一些示例文档?谢谢!成功了。现在我必须尝试在产品中编码3x2之类的东西。你有什么想法在这个左外连接中做吗?如果我有一个示例产品文档,我可以。您是否介意通过编辑您的问题并将其包括在内来共享一些示例文档?产品文档与您的文档类似,但有一个或两个字段,其中包含更多附加信息:例如,如果是饮料或餐点。如果我们车上有菜单(餐、饮料和甜点),我得试着打八折