Por favor, ¿cómo puedo hacer que esto funcione en mongoDB? Para cada elemento de una matriz, obtenga datos que contengan el elemento de otra colección.
Por ejemplo:
"usuarios": [{ "nombre": "John doe", "edad": 51 }, { "nombre": "Jake kim", "edad": 50 }, { "nombre": "Jim hijo", " edad": 51 }]
En otra colección que tengo
"edad": [50,51,52,53,54]
Ahora el resultado de mi deseo es
"50" : [{ "nombre": "Jake kim", "edad": 50 }], "51" : [{ "nombre": "John doe", "edad": 51 }, { "nombre": "Jim hijo", "edad": 51 }]
Puedes hacerlo. Obtener la matriz de usuarios.
const users = [{ "name": "John doe", "age": 51 }, { "name": "Jake kim", "age": 50 }, { "name": "Jim son", "age": 51 }]Obtener la matriz de edades
const age = [50,51,52,53,54]Luego puede mapear a través de la matriz de edades, devolviendo un objeto que tiene el usuario que tiene la misma edad, aquí está el algoritmo.
const mapped = age.map(age => { const user = {} user[age] = users.find(ob => ob.age === age); return user; })Si imprime el resultado mapeado. Así es como se verá, para las edades en las que no pudimos encontrar a sus usuarios, solo tienen un valor indefinido.
console.log(mapped) [ { '50': { name: 'Jake kim', age: 50 } }, { '51': { name: 'John doe', age: 51 } }, { '52': undefined }, { '53': undefined }, { '54': undefined } ]No creo que necesites los datos de age en tu caso. Sin embargo, he proporcionado ambas versiones, una de las cuales usa la lista de edades pero la otra no. Encuéntrelos a continuación.
const users = [{ "name": "John doe", "age": 51 }, { "name": "Jake kim", "age": 50 }, { "name": "Jim son", "age": 51 }]; const age = [50, 51, 52, 53, 54]; const desired = users.reduce((prev, cur) => { (prev[cur.age] ?? (prev[cur.age] = [])).push(cur); return prev; }, {}); console.log("This is the expected result", desired); const desired2 = users.reduce((prev, cur) => { (prev[cur.age] ?? (prev[cur.age] = [])).push(cur); return prev; }, age.reduce((prev, cur) => { prev[cur] = []; return prev; }, {})); console.log("This is the expected result with empty ages", desired2);