Tengo una colección en MongoDB:
[ { "uid": "a1" }, { "uid": "a2" } ]
y un diccionario en mi código JS
let dict = { "a1": "ref1", "a1": "ref2" };
Quiero hacer un agregado que de alguna manera se una a los dos.
let k = ; this.model.aggregate([ { $match: { uid: { $in: Object.keys(dict) } } }, { $project: { ref: // here is where I want to add the equivalent reference } } ])
El resultado esperado sería algo como esto:
[{uid: "a1", ref: "ref1"}, {uid: "a2", ref: "ref2}]
¿Hay alguna manera de obtener la referencia del dict
en $project
?
No sé si hay una manera más fácil de hacerlo, pero así es como lo logré:
db.collection.aggregate([ { $match: { uid: { $in: [ "a1", "a2" ] } } }, { "$project": { "array": { "$objectToArray": { "a1": "ref1", "a2": "ref2" } }, "uid": 1, } }, { "$project": { "ref": { "$filter": { "input": "$array", "as": "elem", "cond": { "$eq": [ "$$elem.k", "$uid" ] } } }, uid: 1, }, }, { "$project": { ref: { "$arrayElemAt": [ "$ref.v", 0 ] }, uid: 1, } } ])
Véalo funcionando aquí . Espero que capte la idea y la convierta en la versión equivalente de nodejs.