繁体   English   中英

具有嵌套文档的Mongodb $ lookup

Mongodb $lookup with nested document

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试使用mongo的查找创建联接。 我有这三个收藏。

订单跟踪

{   
    _id: ObejctId("59fb7815b3b8429f4750b0df"),
    itemName : "Hamam Soap",
    TrackLocation: [{locationId: 1, at:"2017-10-11"},
            {locationId: 2,at:"2017-10-13"}],
    userId : 12,
    price: 20
} 

的locationType

{
    _id: ObejctId("59b2111345cb72345a35fefd"),
    locationId : 1
    productTypeName: "Warehouse"
},{
    _id: ObejctId("59af8ce445cb72345a35feea"),
    locationId : 2
    productTypeName: "On Transit"
}

用户

{
    _id: ObejctId("59a504eb6171b554c02292a9"),
            "user ID":12,
    "userName" : "Shahabaz Shafi",
    "dateOfBirth" : "1992-01-01",
    "addres": {
        "country" : "India",
        "state" : "Karnataka",
        "city" :  "Bengaluru"
    }

}

并尝试将其简化为此类输出。

{
"userName" : "Shahabaz Shafi",
"userId":12,
"dateOfBirth" : "1992-01-01",
"country" : "India",
"state" : "Karnataka",
"city" :  "Bengaluru"

"locationType" : [ {productTypeName: "Warehouse",at:"2017-10-11"}, {productTypeName: "On Transit",at:"2017-10-13"}]
}

编辑:15-11-2018更新了输出

对输出列进行了一些更改

{
   "userName":"Shahabaz Shafi",
   "userId":12,
   "dateOfBirth":"1992-01-01",
   "country":"India",
   "state":"Karnataka",
   "city":"Bengaluru",
   "items":[
      {
         "itemName":"Hamam Soap",
         "userId":12,
         "price":20,
         "TrackLocation":[
            {
               "locationId":1,
               "at":"2017-10-11",
               "productTypeName":"Warehouse"
            },
            {
               "locationId":2,
               "at":"2017-10-13",
               "productTypeName":"On Transit"
            }
         ]
      }
   ]
}

我该如何处理?

PS:我也在用指南针

1 个回复

您可以在mongodb 3.6及更高版本中使用以下聚合

db.User.aggregate([
  { "$lookup": {
    "from": "orderTracking",
    "let": { "userId": "$userId" },
    "pipeline": [
      { "$match": { "$expr": { "$eq": ["$userId", "$$userId"] }}},
      { "$unwind": "$TrackLocation" },
      { "$lookup": {
        "from": "locationType",
        "let": { "location": "$TrackLocation.locationId" },
        "pipeline": [
          { "$match": { "$expr": { "$eq": ["$locationId", "$$location"] }}}
        ],
        "as": "locationType"
      }},
      { "$project": {
        "_id": 0,
        "productTypeName": { "$arrayElemAt": ["$locationType.productTypeName", 0] },
        "at": "$TrackLocation.at"
      }}
    ],
    "as": "locationType"
  }},
  { "$replaceRoot": { "newRoot": { "$mergeObjects": ["$addres", "$$ROOT"] }}},
  { "$project": { "addres": 0 }}
])

产量

[
  {
    "_id": ObjectId("59a504eb6171b554c02292a9"),
    "city": "Bengaluru",
    "country": "India",
    "dateOfBirth": "1992-01-01",
    "locationType": [
      {
        "at": "2017-10-11",
        "productTypeName": "Warehouse"
      },
      {
        "at": "2017-10-13",
        "productTypeName": "On Transit"
      }
    ],
    "state": "Karnataka",
    "userId": 12,
    "userName": "Shahabaz Shafi"
  }
]
1 MongoDB $ lookup嵌套文档并根据需要准备结果

我有两个集合,一个是权限,另一个是角色。 现在,我需要通过按权限对象ID连接从这两个集合中检索数据,我的查询工作正常,但无法按要求获取结果。 集合详细信息如下。 权限: } 角色: } 所需结果: ] 我已经尝试了很多使用$lookup, $u ...

2 MongoDB 聚合 - 我如何“$lookup”嵌套文档“_id”?

我成功地感谢这里的人的帮助,设法在我的文档中 $lookup 两个 ID 以及它们在另一个集合中的代表文档。 我需要采取的下一步是进一步查找“嵌套”ID(指的是另一个集合中的文档)。 我试图简单地放置另一个$lookup管道,但这只是部分工作。 所以碰巧一个“空”文件被包含在chieftain属性 ...

2020-09-13 18:45:17 1 67   mongodb
3 MongoDB $lookup 在 2 级嵌套文档上不使用 $unwind

我有以下文件 贷款请求(只写我想投影的键) 质押的宝石 我想要实现的是 由于我希望将珠宝详细信息填充在每笔贷款的珠宝数组中,因此$unwind对我没有帮助。 (我试着用它做实验) 我以为我可以在贷款数组上运行$map ,然后为贷款的每个宝石运行$lookup (双地图?),但无法提 ...

4 MongoDb $lookup 数组字段中的嵌套文档

我有一个带有一系列卡片的看板集合 示例看板文档: 每个看板都有一个卡片字段类型:[卡片] 这是卡片元素的示例: 正如我们在示例中看到的,每个卡片对象都有一个 orderId 字段,这个 id 属于我的订单集合中的订单文档。 我的预期结果将是整个看板元素,用我的订单集合填充的订单对象替换卡 ...

5 MongoDB:$lookup 后嵌套文档上的 $match

我需要查询与作业相关联的考勤卡集合,而作业则与具有特定设施 ID 的设施相关联。 我有以下聚合查询: 在最后一个 $match 之前的一切工作正常,工作被填充到考勤卡中,设施被填充到工作中。 但比赛由于某种原因不起作用。 但是,如果我添加 factoryId 字段 并将 $match 更改为 ...

6 MongoDB在具有LIKE条件的多文档上创建$ lookup

假设我有2个文档,我想加入。 客户文件 销售文件 我想加入客户和销售文档,以获取所有年龄小于50岁的客户。结果看起来像 我写了聚合语句,但我不知道如何在$ lookup上设置类似条件。 如何在localField或foreignField上使用Like条件编 ...

9 MongoDB $lookup 嵌套文档,限制和计算检索到的数据

我想为每个子房间获取用户未阅读的所有通知(“A”、“B”、“C”等)的计数。 考虑到房间集合中可能有数百万个通知文档和数百个子房间元素,我需要限制它。 出于这个原因,我限制了前 100 个元素的 $lookup,然后检查该通知是否已被用户读取。 我使用 $lookup 中的文档 (roomId) 做 ...

10 MongoDB:在后续文档中使用相同集合的 $lookup

我对 MongoDB 比较陌生,我必须改变我使用先前的 SQL 结构处理特定数据的方式。 因此,我正在执行的方法肯定不是最明智的。 我有一份包含大量信息的工作合同清单。 在那个级别,他们不是按个人分组的。 使用命令$lookup我想将每个合同(文档)与以下合同(如果与同一个工人(个人)相关)联系起 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM