sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan forespørges/opdateres underdokument i MongoDB ved hjælp af C#-driver

1)

QueryComplete = Query.EQ(_id, "2012_11_10");
DayData myData = db.GetCollection<DayData>("DayDataCollection").FindOne(query);
// As HourData is the class member you can retrieve it from the instance of the DayData:
HourData myHour = myData.HR1;

2)

QueryComplete = Query.EQ(_id, "2012_11_10");
UpdateBuilder update = Update.Inc("HR1.Count", 1);
db.GetCollection<DayData>("DayDataCollection").Update(query, update, SafeMode.True)

;

3)I dit tilfælde skal du blot hente DayData-forekomsten og derefter summere alle nødvendige værdier eksplicit:

QueryComplete = Query.EQ(_id, "2012_11_10");
DayData myData = db.GetCollection<DayData>("DayDataCollection").FindOne(query);
// As HourData is the class member you can retrieve it from the instance of the DayData:
int sum = myData.HR1.Count + myData.HR2.Count + ... + myData.HR24.Count;

Men det er ikke elegant. Hvis du vil have den elegante løsning, skal du transformere dine felter til arrayet som:

DayData
{
HR:
[{
Count: 1,
Data: "Hour 1 data"
},
{
},
...
]
}

og arbejde som med arrayet. Lad mig vide, om det er muligt at omdanne det til et array.

4) I dit tilfælde er der igen ingen elegant løsning. Hvad du kan gøre, skal du bare gå gennem dine felter og oprette et array:

int[] Counts = new int[24];
Counts[0] = myData.HR1.Count;
...

Eller du kan oprette enumerator lige i klassen, men jeg synes, det er overkill i dit tilfælde.




  1. Sådan returneres det sidste push() indlejrede dokument

  2. Hvad er den korrekte måde at lave en HAVING i en MongoDB GROUP BY?

  3. Hvordan udfyldes de underdokumenter, der returneres efter samlet opslag i mongodb?

  4. Korrekt måde at starte mongodb og express på?