MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como consultar/atualizar subdocumento no MongoDB usando o driver C#


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) No seu caso, você apenas recupera a instância DayData e soma todos os valores necessários explicitamente:
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;

Mas não é elegante. Se você deseja a solução elegante, precisa transformar seus campos no array como:
DayData
{
HR:
[{
Count: 1,
Data: "Hour 1 data"
},
{
},
...
]
}

e trabalhar como com a matriz. Deixe-me saber se é possível transformá-lo em uma matriz.

4) No seu caso, novamente, não há nenhuma solução elegante. O que você pode fazer é só passar pelos seus campos e criar um array:
int[] Counts = new int[24];
Counts[0] = myData.HR1.Count;
...

Ou você pode criar enumerador direto na classe mas acho que é um exagero no seu caso.