组合两个mongo查询的输出

Combine output of two mongo queries

本文关键字:mongo 查询 输出 两个 组合      更新时间:2023-09-26

我使用node.js和express,我想结合,然后从两个不同的集合返回两个mongodb查询的输出。每个集合都有不同用户的数据,我想在一个列表中显示所有用户的数据。

I tried doing

router.get('/dataAll', function(req, res) {
    var db = req.db;
    db.collection('data1').find().toArray(function(err, items) {
        var firstQuery = items;
        console.log('first query:'+items);
        db.collection('data2').find().toArray(function(err, items2) {
            console.log('second query:'+items2);
            var itemsTotal=[];
            itemsTotal.concat(JSON.stringify(items));
            itemsTotal.concat(JSON.stringify(items2));
            console.log('combined query:'+itemsTotal);
            res.json(itemsTotal);
        });
    });
});

但是我在itemsTotal中得到一个空白数组。如何将输出连接在一起?

同样,当我执行console.log('first query:'+items);时,它只输出[object object]。我如何使它显示正在返回的真实值?

你可以这样做

router.get('/dataAll', function(req, res) {
    var db = req.db, itemsTotal = [], s1,s2, closed = [false,false];
    var adding = function(data){
      itemsTotal.push(data);
    };
    var closing =function(i){
      closed[i] = true;
      if(closed[0]&&closed[1]) return res.json(itemsTotal);
    };
    s1 = db.collection('data').find().stream();
    s1.on('data', adding);
    s1.on('close',function(){ closing(0); });
    s2 = db.collection('data1').find().stream();
    s2.on('data', adding);
    s2.on('close',function(){ closing(1); });
});