首页 > 解决方案 > 如何通过 MongoDB 中的嵌套字段连接到集合

问题描述

我正在努力处理 MongoDB 中的一些查询。假设我有一个看起来像

{
   "competitions: {id: "1", name:"someLeague"},
   "standings": [
      {
         "type": "TOTAL",
         "table": [
            {
               "position": "1",
               "team": {
                  "id": "123",
                  "name": "XYZ"
               },  
               won: "1",
               draw: "2",
               lost: "3",
               points: "4",
            },
            {
               "position": "2",
               "team": {
                  "id": "321",
                  "name": "ABC"
               }
                      ...

以及看起来像的灯具系列

{
   matchDay: "YYYY-MM-DD",
   homeTeam: {id:  "123", name:"ABC"}, 
   awayTeam: {id:  "321", name:"XYZ"},
}

是否可以通过这种方式将这两个集合连接起来,即灯具集合中的“homeTeam”字段将包含所有信息,包括积分、赢得比赛等来自积分榜的总类型?与 field awayTeam 相同,条件是球队的信息将来自排名类型为 away 的数组。

标签: mongodbspring-data

解决方案


在 MongoDB 中,无法在集合 B 中引用集合 A 的文档,以便find对集合 B 的查询自动提供所引用文档的属性。但是,从 MongoDB 3.2 开始,可以在查询期间在多个集合上使用$lookup命令作为aggregation(参见https://stackoverflow.com/a/33511166/3976662)JOIN(类似于标准 SQL)的一部分。在您的情况下,您可以考虑$lookup结合使用$unwind- 类似于MongoDB 文档中的示例。Spring Data Mongo$lookup 从 1.10 开始支持。


推荐阅读