首页 > 解决方案 > 如何从 MongoDb 文档中获取特定值

问题描述

我正在尝试使用 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);
                    }
                }
            }

'tag' 键的值将用于在 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. 我的代码编译并且没有给我任何错误。但我很困惑为什么我无法使用 Iqueryable 对象获取 channelID 值。我知道以下foreach内容不正确,因为我只会收到 1 个与“标签”值匹配的 Bson 文档。但是我没有发现任何有关获取 ChannelId 的不同方法的有用信息。关于我在这里做错了什么有什么想法吗?还是有不同的方法?

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

标签: databasemongodblinqiqueryablebson

解决方案


推荐阅读