Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在MongoDB中获取查询外部的数据_Javascript_Node.js_Mongodb_Callback - Fatal编程技术网

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之类的东西。你有什么想法在这个左外连接中做吗?如果我有一个示例产品文档,我可以。您是否介意通过编辑您的问题并将其包括在内来共享一些示例文档?产品文档与您的文档类似,但有一个或两个字段,其中包含更多附加信息:例如,如果是饮料或餐点。如果我们车上有菜单(餐、饮料和甜点),我得试着打八折