首页 > 解决方案 > 如何在另一个集合的某些条件下搜索一个猫鼬集合?

问题描述

我有两个猫鼬系列。让我们考虑collection-1collection-2。他们的数据类似于以下数据

集合 1:

{'name': 'Tom', 'age':20, 'bank-acc':1111}, 
{'name': 'Dick', 'age':25, 'bank-acc':2222},
{'name': 'Hary', 'age':22, 'bank-acc':3333}

集合-2

{'bank-acc':1111, 'balance':100},
{'bank-acc':2222, 'balance':200},
{'bank-acc':3333, 'balance':300}

现在我想同时查询这两个集合,以从集合 1 中获取年龄大于 20 并且在集合 2 中余额大于 100 的名称。有人建议我,因为这是 MongoDB,它是一个NO-SQL数据库,所以我应该将这两个表合并为一个,然后尝试查询它,但就我而言,将这两个表与真实模式合并是非常不可行的。我使用查找或类似关键字的聚合查询可能是可能的,但我在很多地方搜索过,我不知道在找到这个问题的答案时要搜索什么。任何人都可以提供一个示例聚合查询来一次搜索两个表吗?

标签: node.jsmongodbmongoose

解决方案


集合1

{'name': 'Tom', 'age':20, 'bank-acc':1111},   
{'name': 'Dick', 'age':25, 'bank-acc':2222},  
{'name': 'Hary', 'age':22, 'bank-acc':3333}

集合2

{'bank-acc':1111, 'balance':100},
{'bank-acc':2222, 'balance':200},  
{'bank-acc':3333, 'balance':300}  


 db.getCollection('collection1').aggregate([
    {
        $match:{age:{$gt:20} }
    },
    {
        $lookup:{
           from:'collection2',
           localField:"bank-acc",
           foreignField:'bank-acc',
           as:'balance'
         }
    },
    {
         $unwind:'$balance'
    },
    {
         $match:{
             'balance.balance':{$gt:200}
         }
    },
    {
         $group:{
             _id:null,
             names:{$push:'$name'}
         }
    }
])

推荐阅读