sql >> Database >  >> NoSQL >> MongoDB

Subdocument in MongoDB opvragen/bijwerken met behulp van C#-stuurprogramma

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 uw geval haalt u gewoon de DayData-instantie op en telt u alle benodigde waarden expliciet op:

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;

Maar het is niet elegant. Als u de elegante oplossing wilt, moet u uw velden in de array transformeren zoals:

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

en werk zoals met de array. Laat me weten of het mogelijk is om het om te zetten in een array.

4) In uw geval, nogmaals, is er geen elegante oplossing. Wat u kunt doen, gaat gewoon door uw velden en maakt een array:

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

Of je kunt een enumerator maken in de klas, maar ik denk dat het in jouw geval overdreven is.




  1. MongoDB-shell:zoeken naar collecties die overeenkomen met een naam of regex

  2. Max en min in mongodb

  3. findOneAndUpdate is geen functie

  4. Het laatste bericht van elk gesprek, waarbij een gebruiker betrokken is, weergeven in MongoDB