|
1001 | 1001 | "id": "dkaF-MXPXK4_"
|
1002 | 1002 | },
|
1003 | 1003 | "source": [
|
1004 |
| - "_Lookup_!" |
| 1004 | + "_Lookup_!: (Equivalente a un JOIN en SQL)" |
1005 | 1005 | ]
|
1006 | 1006 | },
|
1007 | 1007 | {
|
|
1032 | 1032 | "id": "UoBeNpgdXK5D"
|
1033 | 1033 | },
|
1034 | 1034 | "source": [
|
1035 |
| - "El `$lookup` genera un _array_ con todos los resultados. El operador `$arrayElementAt` accede al primer elemento." |
1036 |
| - ] |
1037 |
| - }, |
1038 |
| - { |
1039 |
| - "cell_type": "code", |
1040 |
| - "execution_count": null, |
1041 |
| - "metadata": { |
1042 |
| - "id": "Kbg5QWiaXK5D" |
1043 |
| - }, |
1044 |
| - "outputs": [], |
1045 |
| - "source": [ |
1046 |
| - "respuestas = db.posts.aggregate( [\n", |
1047 |
| - " {'$match': { 'Score' : {'$gte': 40}}},\n", |
1048 |
| - " {'$lookup': {\n", |
1049 |
| - " 'from': \"users\",\n", |
1050 |
| - " 'localField': \"OwnerUserId\",\n", |
1051 |
| - " 'foreignField': \"Id\",\n", |
1052 |
| - " 'as': \"owner\"}\n", |
1053 |
| - " },\n", |
1054 |
| - " { '$project' :\n", |
1055 |
| - " {\n", |
1056 |
| - " 'Id' : True,\n", |
1057 |
| - " 'Score' : True,\n", |
1058 |
| - " 'username' : {'$arrayElemAt' : ['$owner.DisplayName', 0]},\n", |
1059 |
| - " 'owner.DisplayName' : True\n", |
1060 |
| - " }},\n", |
1061 |
| - " {'$limit': 20}\n", |
1062 |
| - " ])\n", |
1063 |
| - "list(respuestas)" |
1064 |
| - ] |
1065 |
| - }, |
1066 |
| - { |
1067 |
| - "cell_type": "markdown", |
1068 |
| - "metadata": { |
1069 |
| - "id": "5fJwA3gMXK5F" |
1070 |
| - }, |
1071 |
| - "source": [ |
1072 |
| - "`$unwind` también puede usarse. \"Desdobla\" cada fila por cada elemento del array. En este caso, como sabemos que el array sólo contiene un elemento, sólo habrá una fila por fila original, pero sin el _array_. Finalmente se puede proyectar el campo que se quiera." |
| 1035 | + "El `$lookup` genera un _array_ con todos los resultados. `$unwind` puede usarse para \"desdoblar\" cada fila por cada elemento del array. En este caso, como sabemos que el array sólo contiene un elemento, sólo habrá una fila por fila original, pero sin el _array_. Finalmente se puede proyectar el campo que se quiera.\n" |
1073 | 1036 | ]
|
1074 | 1037 | },
|
1075 | 1038 | {
|
|
1088 | 1051 | " 'foreignField': \"Id\",\n",
|
1089 | 1052 | " 'as': \"owner\"}\n",
|
1090 | 1053 | " },\n",
|
| 1054 | + "\n", |
1091 | 1055 | " { '$unwind': '$owner'},\n",
|
| 1056 | + "\n", |
1092 | 1057 | " { '$project' :\n",
|
1093 | 1058 | " {\n",
|
1094 | 1059 | " 'Id' : True,\n",
|
1095 | 1060 | " 'Score': True,\n",
|
1096 | 1061 | " 'username': '$owner.DisplayName'\n",
|
1097 | 1062 | " }\n",
|
1098 | 1063 | " },\n",
|
1099 |
| - " { '$limit' : 20 }\n", |
| 1064 | + " { '$limit' : 2 }\n", |
1100 | 1065 | " ])\n",
|
1101 | 1066 | "list(respuestas)"
|
1102 | 1067 | ]
|
|
0 commit comments