Tengo un modelo de datos como esta imagen a continuación y todos ellos están en la misma colección, pero por supuesto son diferentes en la estructura de datos. Usé las referencias manuales en películas de documentos y estudios de documentos. Por ejemplo, como el siguiente código:
Para gente de documentos
{ "_id": 100600, "first_name": "Becka", "last_name": "Battson", "birth_day": "2001-10-03" }
Para películas de documentos
{ "_id": 1100, "título": "Tom y Jerry", "director_id": 100100, "release_year": 2018, "imdb": { "puntuación": 4,8, "votos": 100 }, "actores" : [ { "person_id": 100300, "as": "Tom" }, { "person_id": 100400, "as": "Jerry" }, { "person_id": 100500, "as": "Nibbles" } ] }
Para estudios de documentos:
{ "_id": 9991000, "nombre": "Walt Disney", "año de fundación": 1923, "películas": [ 1100, 1200 ], "sede central": { "dirección": "1375 E Buena Vista Dr", " ciudad": "Nueva York", "estado": "Nueva York", "país": "EE.UU." } }
Tengo algunas tareas que necesitan unirse entre 2 documentos para obtener datos. Por ejemplo, "Indica que las películas tienen el actor con el apellido "Battson" . Pero sé que MongoDB no admite unir documentos como unir 2 tablas en RDBMS.
Intenté usar este código a continuación en el shell de MongoDB, pero no tiene sentido. Creo que necesito obtener los valores de _id en la consulta de resultados, luego insertarlos en la matriz array_idActor para que se pueda ejecutar el segundo código:
const array_idActor = db.getCollection('movies_subject').find({last_name: /Battson/}) db.getCollection('movies_subject').find({actors:{$elemMatch:{person_id:{$in:array_idActor}}}}).pretty()Por favor, ayúdame a arreglar esto. Muchas gracias.
unir dos colecciones
db.people.aggregate([ { "$match": { "last_name": "Battson" } }, { "$lookup": { "from": "movies", "localField": "_id", "foreignField": "actors.person_id", "as": "movie_docs" } } ])unir tres colecciones
db.people.aggregate([ { "$match": { "last_name": "Battson" } }, { "$lookup": { "from": "movies", "let": { "people_id": "$_id" }, "pipeline": [ { "$match": { $expr: { "$in": [ "$$people_id", "$actors.person_id" ] } } }, { "$lookup": { "from": "studios", "localField": "_id", "foreignField": "movies", "as": "studio_docs" } } ], "as": "movie_docs" } } ])misma colección
db.collection.aggregate([ { "$match": { "last_name": "Battson" } }, { "$lookup": { "from": "collection", "localField": "_id", "foreignField": "actors.person_id", "as": "movie_docs" } } ])