Node.js Mongoose:使用数据数组进行查询并返回单个数组

Node.js Mongoose:使用数据数组进行查询并返回单个数组,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我正在将Mongoose与Express.js一起使用 我有两个收藏: i) 收集一个模式 用户ID 龋齿 ii)集合B模式 龋齿 卡纳姆 在集合A中,我将存储用户拥有的汽车数量 示例:如果用户XYZ有2辆车,我将创建2个文档,每个文档都有唯一的车ID 当调用REST-get方法时,我希望返回userID、carID和carName 但是,我无法查询多个集合并将它们合并到一个结果中 由于代码的异步性,我当前的方法不起作用: var totalCar = [] CollectionA.fi

我正在将Mongoose与Express.js一起使用

我有两个收藏:

i) 收集一个模式

  • 用户ID
  • 龋齿
ii)集合B模式

  • 龋齿
  • 卡纳姆
在集合A中,我将存储用户拥有的汽车数量 示例:如果用户XYZ有2辆车,我将创建2个文档,每个文档都有唯一的车ID

当调用REST-get方法时,我希望返回userID、carID和carName

但是,我无法查询多个集合并将它们合并到一个结果中

由于代码的异步性,我当前的方法不起作用:

var totalCar = []
CollectionA.find({
    userId: userId
}, function(err, data){
    /*Wrong code here, how to fix it?????
    for(var i = 0; i < data.length; i++){
        CollectionB.find({
        }, function(err, car){
            totalCar.push(car.carName)
        })
    }*/

    res.json({
        userId: userId,
        car: totalCar
    })
})
var totalCar=[]
收藏({
userId:userId
},函数(错误,数据){
/*这里的代码错误,如何修复它?????
对于(变量i=0;i

如何在查询中从另一个集合进行查询,并将来自另一个集合的查询合并为单个结果并发送给用户?

对于您的特定问题,可以在mongodb中使用“$in”查询

var totalCar = [];
CollectionA.find({
    userId: userId
}, function(err, data){
    var cardIds = [];
    for(var i = 0; i < data.length; i++){
        cardIds.push(data[i].cardId);
    }
    CollectionB.find({$in:cardIds}, function(err, cards) {
        for (var i = 0; i < cards.length; i++)
            totalCar.push(cards[i].carName);
        res.json({
            userId: userId,
            car: totalCar
        });
    });
});
var totalCar=[];
收藏({
userId:userId
},函数(错误,数据){
var cardIds=[];
对于(变量i=0;i
但一般来说,如果您正在寻找一种在同步模式下执行代码的方法,您可以查看此模块:

有关使用Mongoose的信息:

CollectionA.find({
    userId: userId
}, function(err, data){
    var carIds = [];

    for(var i=0; i < data.length; i++){
          carIds[i] = data[i].carId;
    }

    CollectionB.find()
        .where('carId')     
        .in(cardIds)
        .exec(function(err, carModel){
              ... //get all the carModel in array
})
CollectionA.find({
userId:userId
},函数(错误,数据){
var carIds=[];
对于(变量i=0;i
谢谢!请确认一下,使用$in不是会在同步模式下查询吗???您的意思是在异步模式下查询,对吧>使用github中的模块?mongodb的回调始终是异步的。通过使用“异步”模块,它可以帮助您使代码看起来像同步的。