使用C#查询BsonDocument

时间:2013-11-11 09:01:24

标签: c# mongodb bson

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

0 个答案:

没有答案