我在 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"]
}
}
所以使用下面的查询,我得到了 ProductData 的集合,即 BsonDocument。
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;
}