Was ich habe
Ich habe die folgenden Dokumente zu meiner Aggregation Pipeline kommen:Wie berechne ich Felder in einem Array von Objekten?
[
{
"email" : "[email protected]",
"name" : "Organization Name",
"users" : [
{
"lastName" : "Nye",
"firstName" : "Bill",
"email" : "[email protected]"
},
{
"lastName" : "Rogers",
"firstName" : "Mr.",
"email" : "[email protected]"
}
]
},
...
]
Was ich will
$project
verwenden möchte ich die firstName
und lastName
Felder in jedem der Arrays $concat
Unterdokumente, um das folgende Ergebnis zu erhalten:
{
"email" : "[email protected]",
"name" : "Organization Name",
"users" : [
{
"name" : "Bill Nye",
"email" : "[email protected]"
},
{
"name" : "Mr. Rogers",
"email" : "[email protected]"
}
]
}
Was ich habe versucht - Versuch # 1
Ich habe die folgende Aggregation versucht:
db.organizations.aggregate([
{
$project: {
email : 1,
name : 1,
users : {
name : { $concat : [ "$users.firstName", " ", "$users.lastName" ] },
email : 1
}
}
}
]);
... aber ich bekomme die folgende Fehlermeldung:
$concat only supports strings, not Array
Was ich habe versucht - Versuch # 2
ich habe auch versucht die folgende Aggregation:
db.organizations.aggregate([
{
$project: {
email : 1,
name : 1,
users : {
name : { $concat : [ "$firstName", " ", "$lastName" ] },
email : 1
}
}
}
]);
... aber name
gibt immer null
zurück.
Ich fühle mich als ob das eine relativ einfache Sache sein sollte, aber ich bin völlig ratlos.
Wie bekomme ich die Ergebnisse, nach denen ich suche?
Während diese Antwort genauso gut funktioniert wie die Antwort von @ chridam und das Problem aus einem anderen Blickwinkel angeht, habe ich seine Lösung verwendet. Vielen Dank für Ihre Zeit! – docksteaderluke
@docksteaderluke Ich wusste, dass du diese Lösung verwenden wirst;) denn trotz der Tatsache, dass die andere Antwort "sachlich richtig" ist, ist es definitiv nicht der richtige Weg. – styvane
Pflege um zu erarbeiten? Warum ist es nicht der richtige Weg? – docksteaderluke