MongoDb に BsonDocument のコレクションがあり、InfoData 形式でデータを保存します
public class InfoData
{
public BsonObjectId Id { get; set; }
public int RowId { get; set; }
public DateTime Date { get; set; }
public string GUID { get; set; }
public BsonDocument ProductData { get; set; }
}
以下はサンプルデータです。
/* 0 */
{
"_id" : ObjectId("527b7894e9374f1678f3493d"),
"RowId" : 37883504,
"Date" : ISODate("2013-07-01T00:00:02Z"),
"GUID" : "e776cce3-4e22-41c2-94f3-e71bcda0498d",
"ProductData" :
{
"ping" : [""],
"ViewPath" : ["All File and Registry\\CollectedFiles"],
"PingErrors" : ["0"],
"PingSeq" : ["1"]
}
}
/* 1 */
{
"_id" : ObjectId("527b7894e9374f1678f3493e"),
"RowId" : 37883505,
"Date" : ISODate("2013-07-01T00:00:07Z"),
"GUID" : "d9681035-69e3-4abc-ba24-ba83ba35a87b",
"ProductData" :
{
"Session_Id" : ["d9681035-69e3-4abc-ba24-ba83ba35a87b"],
"DotNetCLR" : ["Microsoft"],
"RunType" : ["gui"],
"PingSeq" : ["0"],
"PingErrors" : ["0"],
"DotNet" : ["v2.0.50727"],
"Machine_Id" : ["f2851af6-505d-45ce-adc5-3ef973d2fa1d"],
"ping" : [""]
}
}
/* 2 */
{
"_id" : ObjectId("527b7894e9374f1678f3493f"),
"RowId" : 37883507,
"Date" : ISODate("2013-07-01T00:00:19Z"),
"GUID" : "d9681035-69e3-4abc-ba24-ba83ba35a87b",
"ProductData" :
{
"PingErrors" : ["0"],
"OsName" : ["Windows 7 Home Premium Service Pack 1 64-bit"],
"PrimaryWidth" : ["1366"],
"DotNet" : ["v2.0.50727", "v3.0", "v3.5"],
"ping" : [""],
"PrimaryHeight" : ["768"],
"OsArch" : ["Win64"],
"OsType" : ["Win7"],
"OsPlatformType" : ["Workstation"],
"SymcNetwork" : ["external"],
"OsEnglishName" : ["English (United States)"],
"OsIsoLang" : ["en"],
"PingSeq" : ["1"],
"DotNetCLR" : ["Microsoft"],
"DotNetMax" : ["v3.5"]
}
}
以下のクエリを使用して、BsonDocument である ProductData のコレクションを取得します。
MongoCollection mCollection = ObjectMongoDatabase.GetCollection("Telnet");
var sortedData = (from a in mCollection.AsQueryable<InfoData>()
select a.ProductData);
私の質問 :
sortedData を照会したい
- 「DotNet = v2.0.50727」の製品データのリストを取得する
- 「日付」が特定の範囲内にある製品データのリストを取得します。[例: 2013 年 1 月 12 日から 2013 年 1 月 17 日]
**以下の関数を使用して BsonDocument を生成するためのキー値データ
PingErrors|0
OsName|Windows 7 Home Premium Service Pack 1 64-bit
DotNet|v2.0.50727
DotNet|v3.0
DotNet|v3.5
OsArch|Win64
DotNetCLR|Microsoft
DotNetMax|v3.5
** 上記のように、この関数はキーと値のペアの形式で入力を取得します ** 他のケースではキーと値のペアが異なる場合があるため、この関数を作成しました。つまり、いくつかの値を追加したり削除したりできます。
private BsonDocument MakeBsonDocument(List<string> keyValueData)
{
Dictionary<string, List<string>> dic = new Dictionary<string, List<string>>();
List<string> ValuePair = null;
foreach (string kvp in keyValueData)
{
string[] keyValuePair = kvp.Split('|');
if(dic.ContainsKey(keyValuePair[0].ToString()))
{
ValuePair.Add(keyValuePair[1].ToString());
}
else
{
ValuePair = new List<string>();
ValuePair.Add(keyValuePair[1].ToString());
dic.Add(keyValuePair[0].ToString(), ValuePair);
}
}
BsonDocument bDoc = new BsonDocument();
bDoc.AddRange(dic);
return bDoc;
}