Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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 Mongojs从两个集合中提取数据并合并结果_Javascript_Node.js_Mongodb_Mongojs - Fatal编程技术网

Javascript Mongojs从两个集合中提取数据并合并结果

Javascript Mongojs从两个集合中提取数据并合并结果,javascript,node.js,mongodb,mongojs,Javascript,Node.js,Mongodb,Mongojs,我是一个mongodb新手,非常感谢您在下面描述的这个问题上提供帮助 我有两个系列“用户”和“包”。用户收集方案有{username,firstname,lastname}和行李收集方案有{username,bagname,bagimage} 在获取用户包时,我还希望显示firstname和lastname。我的问题是,我似乎无法正确地构建查询。我正在使用nodejs和driver。下面是我对取回所有行李的查询 thmConfig.db.bags.find({status: "1"}).so

我是一个mongodb新手,非常感谢您在下面描述的这个问题上提供帮助

我有两个系列“用户”和“包”。用户收集方案有{username,firstname,lastname}和行李收集方案有{username,bagname,bagimage}

在获取用户包时,我还希望显示firstname和lastname。我的问题是,我似乎无法正确地构建查询。我正在使用nodejs和driver。下面是我对取回所有行李的查询

  thmConfig.db.bags.find({status: "1"}).sort({$natural:-1}, function(err, data) 
{
        var bagList = '{"bags":[';


     if( err || !data) res.send('[{"status": "0"}]');
        else data.forEach( function(innerData) {
            console.log(innerData.username);
            bagList += JSON.stringify(innerData)+",";

                 /*
                   This is where I would lke to also append the firstname from the 
                users collection

                   */

        });

    console.log(bagList.slice(0,1));
    res.write(magList.slice(0,-1));
    res.end(']}');
});     
我将非常感谢任何有关这方面的帮助或指点。我没有选择改变驱动程序,所以我现在特别想用mongojs实现这个

感谢和问候,
Titash

我认为除了从用户集合中读取并以编程方式执行此“加入”操作之外,您没有太多选择。
您可以按每个包(在循环中)读取用户文档,也可以提前将整个用户集合读取到对象中,并按用户名进行查找。您可以使用
$in
操作符进行查找

伪代码(ish):


您也在使用express.js吗?哪个版本?还要注意,mongojs调用是异步的。因此,如果您想进一步调用它(比如为每个包获取用户数据),您可能需要进行一些重构。通过重构,您是否建议从mongojs迁移到另一个驱动程序?
// get an array of bags matching your query
db.bags.find({status: "1"}).sort({$natural:-1}, function(err, bags) {
  // get a list of usernames from the bags:
  var usernames = bags.map(function(bag) { return bag.username; });

  // perform query on user table: find all users for which we have a bag
  db.users.find({ username : { $in : usernames } }, function(err, users) {
    // create a mapping of username -> first name for easy lookup
    var usernames = {};
    users.forEach(function(user) {
      usernames[user.username] = user.firstname;
    });

    // map first names to bags
    bags.forEach(function(bag) {
      bag.firstname = usernames[bag.username];
    });

    // done: return it as JSON (no need to build a JSON string ourselves)
    res.send({ bags : bags });
  });
});