Come tutti sapete, find()
restituisce una serie di risultati, con findOne()
restituire solo un oggetto semplice.
Con Angolare, questo fa un'enorme differenza. Invece di andare a {{myresult[0].name}}
, posso semplicemente scrivere {{myresult.name}}
.
Ho trovato che il metodo $lookup
nella pipeline aggregata restituisce una matrice di risultati anziché solo un singolo oggetto.
Per esempio, ho due colletions:
users
collezione:
[{
"firstName": "John",
"lastName": "Smith",
"country": 123
}, {
"firstName": "Luke",
"lastName": "Jones",
"country": 321
}]
countries
collezione:
[{
"name": "Australia",
"code": "AU",
"_id": 123
}, {
"name": "New Zealand",
"code": "NZ",
"_id": 321
}]
mio aggregato $lookup
:
db.users.aggregate([{
$project: {
"fullName": {
$concat: ["$firstName", " ", "$lastName"]
},
"country": "$country"
}
}, {
$lookup: {
from: "countries",
localField: "country",
foreignField: "_id",
as: "country"
}
}])
I risultati della query:
[{
"fullName": "John Smith",
"country": [{
"name": "Australia",
"code": "AU",
"_id": 123
}]
}, {
"fullName": "Luke Jones",
"country": [{
"name": "New Zealand",
"code": "NZ",
"_id": 321
}]
}]
Come si può vedere dai risultati di cui sopra, ogni country
è un array invece di un singolo oggetto come "country": {....}
.
Come posso avere il mio $lookup
restituire un singolo oggetto invece di un array poiché corrisponderà sempre solo a un singolo documento?