【问题标题】:How do I choose the selected values from MongoDB?如何从 MongoDB 中选择选定的值?
【发布时间】:2017-01-23 10:29:54
【问题描述】:

鉴于我在 MongoDB 中的数据结构与上述类似。 我如何将它们用于以下代码,我想使用 NodeId 作为我的标题和 WT 的值作为我的图表值。请忽略我在 ChartValues 的 title 和 Values 中输入的内容。

 new LineSeries
     {
     Title = "Screws",
    Values = new ChartValues<double> {4.5, 4.5, 4.45, 4.4, 4.4, 4.35, 4.35},
    },

【问题讨论】:

  • 您需要将集合中具有相同标题的所有值分组并从分组项中获取 Wt 值吗?
  • 是的.....实际上我需要这里的值和这里的标题的帮助。在这里,我在下面手动将点添加到 ChartValues 并添加到标题中,这不是我想要的。我有 6 个对象,都具有不同的 WT 值。我如何使用所有 6 来绘制这个值图?
  • 可撤销?):@MaksimSimkin
  • 是的,当然。但这不是关于图表的答案,它只是从 mongo 获取数据
  • nvm ,你能再次发布从 mongodb 获取的数据吗?我可以将它用于我的标题,如果你不知道如何为图表做的话,也许可以通过图表来工作

标签: c# mongodb winforms mongodb-query livecharts


【解决方案1】:

我会假设你有一个数据模型类,如果没有,我建议创建一个。我的 json 模型如下所示:

public class Value
{
    public ObjectId _id { get; set; }
    public Event @event { get; set;}
}

public class Event
{
    public string NodeId {get;set;}
    public string FirmwareVER {get;set;}
    public double SignalSTR {get;set;}
    public double battery {get;set;}
    public double CEL {get;set;}
    public double WT {get;set;}
    public string Onlinestat {get;set;}
    public double timeStamp {get;set;}
}

在这种情况下,您可以从集合中汇总您的数据:

var collection = db.GetCollection<Value>("chart");
var res = collection.Aggregate()
              .Group(x => x.@event.NodeId,
                     x => new {Name = x.Key, WTs = x.Select(r => r.@event.WT).ToList()})
              .ToList();

这将是我使用的一些示例数据的结果:

之后,您可以将数据添加到图表中,例如:

res.Select(r => new LineSeries{Title = r.Name, Values = new ChartValues<double>(r.WTs)});

【讨论】:

  • 我的问题是图表的形式。其中标题是图表中线条的名称,并且图表值正在绘制图表
  • 好的,抱歉,我误会了,winforms 图表不是什么都知道的东西 :)
  • 没问题。让我们暂时获得标题。但是我替换你的值类的类是 rootobject 类,我已经添加到我的问题中
  • 事件是一个数组。
  • 要么事件不是数组,要么你的json错误。
【解决方案2】:

LiveCharts 的最佳功能之一是您可以绘制任何您想要的类型,并且您是类型安全的,考虑到您想要使用给定的 IEnumerableValue 类型绘制 WT 属性。

public class Value
{
    public ObjectId _id { get; set; }
    public Event @event { get; set;}
}

public class Event
{
    public string NodeId {get;set;}
    public double WT {get;set;}
}

您可以教库绘制您想要的任何类型,在这种情况下,让我们教它绘制来自 Value 类型的 WT 属性:

var mapper = Mappers.XY<Value>()
                          .X((index,value) => index)
                          .Y((i,v) => (double) v.@event.WT);
Charting.For<Value>(mapper);

也就是说,每次库找到ChartValues&lt;Value&gt; 实例时,它都会使用我们设置的映射器。映射器非常直观,这意味着我们将使用从零开始的索引作为 X 坐标,并将 WT 属性作为 Y。

此行通常需要在应用程序启动时添加,有很多方法可以教库如何绘制自定义类型,更多信息请参阅https://lvcharts.net/App/examples/v1/wpf/Types%20and%20Configuration

就是这样,现在你可以直接绘制Value类型

IEnumerable<Value> dataSource = // source from data base...

new LineSeries
 {
 Title = "Screws",
 Values = dataSource.AsChartValues(), //converts the source to
                                      //an instance of ChartValues<Value>
},

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 2017-08-21
    • 2019-05-21
    • 2015-10-05
    • 2021-12-07
    • 2020-03-27
    • 2015-05-09
    • 2013-05-30
    • 2018-08-19
    相关资源
    最近更新 更多