【问题标题】:Mongoose: query with array of datas and return single arrayMongoose:查询数据数组并返回单个数组
【发布时间】:2014-10-21 05:09:12
【问题描述】:

我在 Express.js 中使用 Mongoose

我有 2 个收藏:

i)Collection A Schema

  • 用户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
    })
})

如何在查询中从另一个集合中查询并将来自另一个集合的查询组合成一个结果并发送给用户?

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    对于您的特定问题,您可以在 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

    【讨论】:

    • 谢谢!只是为了和你核实一下,使用 $in 不是会在同步模式下查询吗???你的意思是在异步模式下查询吧>使用来自 github 的模块?
    • mongodb 的回调总是异步的。通过使用“异步”模块,它可以帮助您使您的代码看起来像同步。
    【解决方案2】:

    使用猫鼬:

    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
    })
    

    【讨论】:

      猜你喜欢
      • 2018-06-12
      • 2019-11-30
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      • 2015-04-18
      • 2022-01-10
      相关资源
      最近更新 更多