Ich habe folgendes MongoDB Dokument:MongoDB: Aktualisieren eine durchschnittlich in einem Dokument mit 2 verschachtelter Arrays
{
_id: ObjectId(),
company_name: "Name",
registered: 2/21/2015 2:00,
trucks: [
{
truck_id: "TEB7622",
weight: 88.33,
capacity: 273.333,
length: 378.333,
width: 377.383,
average_grade: 2.5,
grades: [
{
grade_number: 4,
timestamp: 2/21/2015 2:00
}
]
},
{
truck_id: "TEB5572",
weight: 854.33,
capacity: 2735.333,
length: 378.333,
width: 37.383,
average_grade: 3.8,
grades: [
{
grade_number: 4,
timestamp: 2/21/2015 2:00
}
]
}
]
}
Ich mag average_grade
jeden Lastwagen aktualisieren, indem all grade_numbers
hinzufügen. Das Problem, das ich habe, ist, dass die grade_numbers
, die ich hinzufügen möchte, in einem Array innerhalb eines Arrays sind. Ich habe versucht, $unwind
zu verwenden, um beide Lastwagen- und Gradarrays abzuwickeln.
Dies ist die Abfrage Ich habe versucht mit:
db.col.aggregate([
{$unwind: "$trucks"},
{$unwind: "$trucks.grades"},
{ $project: {
"_id": "$trucks.truck_id",
"trucks.average_grade": { $avg: { $sum: "trucks.grades.grade_number"} }
}
}])
Muss ich etwas mehr zu meiner Anfrage hinzufügen müssen? Ich möchte alle trucks.average_grades
aktualisieren, da viele von ihnen in dem Dokument, das ich versuche zu aktualisieren.
Sie können Aggregation nicht verwenden, um ein Dokument zu aktualisieren – styvane
@ Michael9 Also dann muss ich zwei Abfragen richtig ausführen? Eine um die Durchschnittswerte zu erhalten und eine um die Durchschnittswerte zu aktualisieren. Muss ich die Mittelwerte auf einer anderen "Variable" speichern? – suecarmol
Doppelt verschachtelte Arrays sind keine gute Idee, wenn Sie die darin enthaltenen Daten abfragen müssen. Sie sind in Ordnung, wenn die Daten nur zur Anzeige dienen. Vielleicht sollten Sie das Datenmodell noch einmal überdenken? Vielleicht sollte jeder LKW sein eigenes Dokument mit einem 'company_id' Feld sein? Oder jede Note ein eigenes Dokument? Sie möchten sich nicht auf eine doppelte Abwicklungsaggregationspipeline für eine normale Abfrage verlassen, daher würde ich die folgende Lösung nur empfehlen, wenn die Abfrage ungewöhnlich ist. – wdberkeley