首页 > 解决方案 > 通过 C# 进行简单的 LiteDB 查询(我在苦苦挣扎!)

问题描述

所以,我想我会试试 LiteDB,但我有点挣扎!

试图将日志数据写入其中。所以,我到目前为止(简化)

一个类(数据结构)

private class PerBarData
{
    public DateTime ts { get; set; }
    public double o { get; set; }
    public double h { get; set; }
    public double l { get; set; }
    public double c { get; set; }
    public double v { get; set; }
    public Dictionary<int, double> r { get; set; }
}

我正在像这样向 LiteDB 写入数据

// Get a collection (or create, if doesn't exist)
var col = db.GetCollection<PerBarData>("PerBarData");

Dictionary<int, double> dict = new Dictionary<int, double>();
for (int i=1; i<maxIndexes; i++)
{
    dict.Add(i,plotBIAS[i]);            
}                       

// Create your new customer instance
var pbd = new PerBarData
{ 
    ts = Time[1],
    o = Open[1],
    h = High[1],
    l = Low[1],
    c = Close[1],
    v = Volume[1],
    r = dict
};

// Insert new customer document (Id will be auto-incremented)
col.Insert(pbd);    

这似乎有效,因为实际上正在添加记录。我可以在 LiteDB 工作室中看到这一点。我只能看到大概是序列化的文本。像这样的对象

/* 1 */
{
  "_id": {"$oid": "6009b32dfb2026288486321a"}
}
/* 2 */
{
  "_id": {"$oid": "6009b39dfb2026288486321b"}
}

所以 - 大概,到目前为止,我走对了。所以,要检索一些数据。我想要的只是两个日期之间的数据,或者至少超过一个日期。所以,我试试这个

DateTime startDate = Time[CurrentBar-1];
DateTime endDate = Time[0]; 
    var col = db.GetCollection<PerBarData>("PerBarData");
    // Use LINQ to query documents (filter, sort, transform)
    var results = col.Find(Query.GTE("ts", startDate));
    foreach(var pbd in results)
    {
        PPrint(pbd.ts.ToString());
    }

但是,它通常只是挂在那里。当然,不会打印任何日期。我最初是在尝试 Query.Between 和 2 个日期。相同的。

任何人都可以把我推向正确的方向吗?我真的很想尝试一下。

谢谢。

标签: litedb

解决方案


我最终设法解决了这个问题。find查询的替换,如下

var results = col.Find(x => x.ts >= startDate);


推荐阅读