sql >> Databáze >  >> NoSQL >> MongoDB

Jak dotazovat/aktualizovat dílčí dokument v MongoDB pomocí ovladače 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)Ve vašem případě stačí načíst instanci DayData a poté explicitně sečíst všechny potřebné hodnoty:

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;

Ale elegantní to není. Pokud chcete elegantní řešení, musíte svá pole přeměnit na pole jako:

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

a pracujte jako s polem. Dejte mi vědět, zda je možné jej transformovat na pole.

4)Ve vašem případě opět žádné elegantní řešení neexistuje. Co můžete udělat, stačí projít svá pole a vytvořit pole:

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

Nebo můžete vytvořit enumerátor přímo ve třídě, ale myslím, že ve vašem případě je to přehnané.




  1. Klient Redis

  2. Úvod do Percona Server pro MongoDB 4.2

  3. Proč je před ID dokumentu MongoDb podtržítko?

  4. Hledání hodnoty libovolného pole v MongoDB bez jeho explicitního pojmenování