我正在使用Mongoose和Express.js
我有两个系列:
i)收集架构
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
})
})
如何从查询中的其他集合进行查询,并将来自其他集合的查询合并为单个结果并发送给用户?
答案 0 :(得分:0)
对于您的特定问题,您可以在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
});
});
});
但总的来说,如果您正在寻找一种在同步模式下执行代码的方法,您可以查看以下模块:https://github.com/caolan/async
答案 1 :(得分:0)
使用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
})