sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man frågar/uppdaterar underdokument i MongoDB med C#-drivrutinen

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)I ditt fall hämtar du bara DayData-instansen och summerar sedan alla nödvändiga värden explicit:

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;

Men det är inte elegant. Om du vill ha den eleganta lösningen behöver du förvandla dina fält till arrayen som:

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

och arbeta som med arrayen. Låt mig veta om det är möjligt att omvandla det till en array.

4) I ditt fall, återigen, finns det ingen elegant lösning. Vad du kan göra, gå bara igenom dina fält och skapa en array:

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

Eller så kan du skapa en enumerator direkt i klassen men jag tycker att det är överdrivet i ditt fall.




  1. Ladda gnistdata i Mongo / Memcached för användning av en webbtjänst

  2. Hur infogar man data i en mongodb-samling med c# 2.0-drivrutinen?

  3. Mongodb 2.4 2dsphere-frågor mycket långsamma (med $geoIntersects)?

  4. MongoDB Chain Replication Basics