0

我在 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;
    }
4

0 回答 0