J'ai un tableau comme ci-dessous: et il y a des documents de MongoDB comme ci-dessous: P> [{
"name": "perl", "company": "A", testInform: { "_id": 3, "name": "perl", "car": "Renaut"}
},{
"name": "melon", "company": "B", testInform: { "_id": 2, "name": "melon", "car": "ferrari"}
},{
"name": "apple", "company": "C", testInform: { "_id": 1, "name": "apple", "car": "ford"}
},{
"name": "apple", "company": "D", testInform: { "_id": 1, "name": "apple", "car": "ford"}
},{
"name": "perl", "company": "E", testInform: { "_id": 3, "name": "perl", "car": "Renaut"}
},{
"name": "apple", "company": "F", testInform: { "_id": 1, "name": "apple", "car": "ford"}
}]
3 Réponses :
$ lookup strong> avec mot-clé de pipeline
Si les données CODE> TEST CODE> TRAY sont stockées dans une collection, l'obtention de O / P est assez simple $ lookup code>
avec $ projet code>
agrégation
L'idée est d'itérer le $ arrayelemat code>
pourquoi? Parce que la recherche va chercher les documents joints dans une matrice en tant que testinform code> p>
curseur code >
des documents stockés dans mongodb array.pototype.find () code>
L'objet de test code> qui correspond au champ code> nom code>, ajoutez-le du résultat. p>
La matrice de test n'est pas stockée dans une collection. C'est juste une valeur constante dans JS. Pourriez-vous vous recommander une autre solution pour cela?
@DDDDD a mis à jour la réponse avec une autre solution. Vérifiez-le si cela fonctionne pour vous. REMARQUE B>: J'ai utilisé async / attendre la syntaxe ici, si ce n'est pas ce que vous utilisez, peut modifier l'itération à l'aide de
Callback code> Style avec
foreach code>. Mais la logique reste la même.
L'agrégation a une scène: itérate sur le tableau code> Test CODE> et obtenir l'élément de tableau en tant qu'oppose qui correspond au champ code> nom code> dans le document et le tableau (en utilisant $ Réduire opérateur).