具有项目请求字段的一对多 MongoDB 查找

问题描述

我有两个集合的一对多关系,比如 A 到 B。我如何在一个文档中为每个 id 显示所需的输出。 例如,我有

/*Collection A*/
{
    "a_Id": "abc","name": "xyz","age": 5
}       

...//其他文档

/*Collection B*/
{
    "b_id": "abc","FeeAmount": 800000,"invoiceNumber": "A10","Date": "2021-10-29T00:00:00.000+04:00","Paidamount": 200000
},{
    "b_id": "abc","FeeAmount": 90,"invoiceNumber": "A20","Paidamount": 20
}

//...其他文档多个不同的 id 例如 abc1,abc2

根据 id 查找后如何获得以下输出? 这是每个 ID 一个文档。

    /*Desired OutPut*/
//Document 1
    {
       "name": "xyz","age": 5
       "availableLimitAmount": 800000,"Paidamount": 200000
    },{
        "name": "xyz","age": 5
        "FeeAmount": 90,"Paidamount": 20
    }
//Document 2
 {
       "name": "qwe","age": 50
       "availableLimitAmount": 20000,"FeeAmount": 40000,"invoiceNumber": "B10","Date": "2021-1-1T00:00:00.000+04:00","Paidamount": 1000
    },{
        "name": "qwe","age": 50
        "FeeAmount": 40,"invoiceNumber": "B20","Date": "2021-2-2T00:00:00.000+04:00","Paidamount": 500
    }

解决方法

这是关于如何实现这一目标的working solution

db.coll1.aggregate([
  {
    $lookup: {
      localField: "a_Id",from: "coll2",foreignField: "b_id",as: "data",}
  },{
    $unwind: "$data"
  },{
    $replaceRoot: {
      "newRoot": {
        "$mergeObjects": [
          "$$ROOT","$data"
        ]
      }
    }
  },{
    $project: {
      "data": 0
    }
  }
])

更新

db.coll1.aggregate([
  {
    $lookup: {
      localField: "a_Id",{
    $project: {
      "data": 0
    }
  },{
    $group: {
      _id: "$a_Id",data: {
        $push: "$$ROOT"
      }
    }
  }
])
,
  1. 使用 $lookup 运算符连接两个集合 AB
  2. 执行 $unwind 操作以“传播”结果。
  3. $project 随心所欲。

试试这个:

db.A.aggregate([
    {
        $lookup: {
            from: "B",localField: "a_Id",as: "B"
        }
    },{ $unwind: "$B" },{
        $project: {
            "_id": 0,"name": "$name","age": "$age","FeeAmount": "$B.FeeAmount","invoiceNumber": "$B.invoiceNumber","Date": "$B.Date","PaidAmount": "$B.PaidAmount",}
    }
]);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...