MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment interroger/mettre à jour un sous-document dans MongoDB à l'aide du pilote 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) Dans votre cas, vous récupérez simplement l'instance DayData, puis additionnez explicitement toutes les valeurs nécessaires :

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;

Mais ce n'est pas élégant. Si vous voulez la solution élégante, vous devez transformer vos champs en tableau comme :

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

et fonctionne comme avec le tableau. Faites-moi savoir s'il est possible de le transformer en tableau.

4) Dans votre cas, encore une fois, il n'y a pas de solution élégante. Ce que vous pouvez faire, c'est parcourir vos champs et créer un tableau :

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

Ou vous pouvez créer un recenseur directement dans la classe, mais je pense que c'est exagéré dans votre cas.