Estoy buscando un método para unirme a una colección y una matriz externa de cadenas (con códigos), que devuelve otra matriz de cadenas con todos los códigos de la primera matriz que no están incluidos en la colección.
La muestra de la colección:
[{ _id:ObjectId("61bf57bc9d1f93b7ae5fa785"), "Movie": { "Code": "123", "OriginalTitle": "Title 1", "Year": 2021 }},{ _id:ObjectId("61bf57bc9d1f93b7ae5fa786"), "Movie": { "Code": "124", "OriginalTitle": "Title 2", "Year": 2021 }},{ _id:ObjectId("61bf57bc9d1f93b7ae5fa787"), "Movie": { "Code": "125", "OriginalTitle": "Title 3", "Year": 2021 }},{ _id:ObjectId("61bf57bc9d1f93b7ae5fa788"), "Movie": { "Code": "126", "OriginalTitle": "Title 4", "Year": 2021 } }]la matriz externa:
const codes = ["125", "127", "128", "129"];la agregación debe comparar "Movie.Code" con la matriz y devuelve otra matriz con los siguientes valores:
returnCodes = ["127", "128", "129"];¿Cómo puedo hacerlo?
Tal vez esto:
db.collection.aggregate([ { $group: { _id: null, Code: { $push: "$Movie.Code" } } }, { $project: { returnCodes: { $filter: { input: codes , cond: { $not: { $in: [ "$$this", "$Code" ] } } } } } } ]).toArray().shift().returnCodesPor supuesto, podrías hacerlo también en Javascript:
const codes = ["125", "127", "128", "129"]; const coll = db.collection.find({}, { Code: "$Movie.Code" }).toArray().map(x => x.Code); returnCodes = codes.filter(x => !coll.includes(x));