MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So fragen/aktualisieren Sie Unterdokumente in MongoDB mit dem C#-Treiber

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) In Ihrem Fall rufen Sie einfach die DayData-Instanz ab und summieren dann alle erforderlichen Werte explizit:

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;

Aber es ist nicht elegant. Wenn Sie die elegante Lösung wollen, müssen Sie Ihre Felder wie folgt in das Array umwandeln:

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

und arbeite wie beim Array. Lassen Sie mich wissen, ob es möglich ist, es in ein Array umzuwandeln.

4) Auch in Ihrem Fall gibt es keine elegante Lösung. Was Sie tun können, gehen Sie einfach Ihre Felder durch und erstellen Sie ein Array:

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

Oder Sie können Enumerator direkt in der Klasse erstellen, aber ich denke, es ist in Ihrem Fall übertrieben.