Mam następujący dokument MongoDB:MongoDB: Aktualizacja średnio w dokumencie z 2 zagnieżdżonych tablic
{
_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
}
]
}
]
}
Chcę zaktualizować każdy wózek na average_grade
przez dodanie wszystkich grade_numbers
. Problem, który mam, polega na tym, że próbuję dodać grade_numbers
w tablicy w tablicy. Próbowałem używać $unwind
, aby odwijać zarówno tablice ciężarówek, jak i tablice ocen.
to zapytanie Próbowałem, używając:
db.col.aggregate([
{$unwind: "$trucks"},
{$unwind: "$trucks.grades"},
{ $project: {
"_id": "$trucks.truck_id",
"trucks.average_grade": { $avg: { $sum: "trucks.grades.grade_number"} }
}
}])
muszę dodać coś więcej do mojego zapytania? Chcę zaktualizować WSZYSTKIE trucks.average_grades
, ponieważ jest ich dużo w dokumencie, który próbuję zaktualizować.
Nie można używać agregacji do aktualizacji dokumentu – styvane
@ Michael9 Więc muszę przeprowadzić dwa kwerendy w prawo? Jeden, aby uzyskać średnie i jeden, aby zaktualizować średnie? Czy muszę przechowywać średnie na innej "zmiennej"? – suecarmol
Podwójne tablice zagnieżdżone nie są dobrym pomysłem, jeśli potrzebujesz zapytać o dane w nich zawarte. Są w porządku, jeśli dane są tylko do wyświetlenia. Być może powinieneś ponownie rozważyć model danych? Może każda ciężarówka powinna być własnym dokumentem, z polem "company_id"? Lub każdy ocenia swój własny dokument? Nie chcesz polegać na podwójnym rozwijaniu potoku agregacji dla normalnego zapytania, więc nie polecałbym poniższego rozwiązania, chyba że zapytanie jest rzadkie. – wdberkeley