如何从MongoDb文档中获取特定值

时间:2019-11-13 23:27:07

标签: database mongodb linq iqueryable bson

我正在尝试使用IQueryable对象从Bson文档中获取特定值。我有一个读取json结构的方法,如下所示。

"SimulatedData": [
    {
      "value": 1819.00923045901,
      "units": "hp",
      "tag": "comp/totalIhp",
      "name": "Compressor - Total IHP"
    },
{
      "value": 789.294125,
      "units": "RPM",
      "tag": "comp/averageSpeed",
      "name": "Compressor - Speed"
    },
    {
      "value": 2064.74658240481,
      "units": "hp",
      "tag": "comp/totalBhp",
      "name": "Compressor - Total BHP"
    }
]

我正在读取此JSON,获取“标签”键值,然后在MongoDB的集合中寻找此标签值。

try
            {
                string jsonFromFile;
                using (var reader = new StreamReader(path))
                {
                    jsonFromFile = reader.ReadToEnd();
                }

                var simulatedData = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(jsonFromFile);

                foreach (var channel in simulatedData.SimulatedData)
                {
                    var tag = channel.tag;

                    var master = DBConnect.CosmosClient.GetCollection<MasterVariables>("MasterVariables");

                    var channelId = master.AsQueryable().Where(x => x.Tag == $"{tag}");


                    foreach(var c in channelId)
                    {
                        string id = c.ChannelID;
                        Console.WriteLine(id);
                    }
                }
            }

“标记”键的值将用于在MasterVariables中搜索匹配项。 MasterVariables中与“ tag”键的值匹配的文档将生成JSON / bson,如下所示。我有一个使用这些值并将其设置为类属性的类

  {
        "Tag" : "comp/idealTotalSucCapacity",
        "Group" : "{ id : \"comp\", parent : \"#\", text : \"Compressor\" }",
        "Series" : "Compressor",
        "Enabled" : true,
        "ChannelID" : "C8",
        "productType" : "Spotlight_Comp",
        "database" : "compdata"
    }

MasterVariables类(如下)

public class MasterVariables
        {
            public string Tag { get; set; }
            public string Group { get; set; }
            public string Series { get; set; }
            public bool Enabled { get; set; }
            public string ChannelID { get; set; }
            public string productType { get; set; }
            public string database { get; set; }
        }

我的主要问题是我无法使用c.ChannelID获得“ ChannelID”值。我的代码可以编译,不会给我任何错误。但是我对于为什么不能使用Iqueryable对象获取channelID值感到非常困惑。我知道下面的foreach是不正确的,因为我将只收到1个与'tag'值匹配的Bson文档。但是我没有发现任何有关获取ChannelId的方法的有用信息。对我在这里做错的任何想法吗?还是有其他方法?

 foreach(var c in channelId)
   {
     string id = c.ChannelID;
     Console.WriteLine(id);
   }

0 个答案:

没有答案