使用带有 mongodb 的 linq 选择 user-specified 日期之间的文档
Selecting documents between user-specified dates using linq with mongodb
我是 MongoDB 的新手,我 运行 遇到了一个查询问题。该查询尝试查找 2 个 DateTime 值之间的所有文档。我以前能够 运行 具有所需结果的类似查询,但是使用不同的数据库模式。通过对我当前的数据库模式应用相同的查询,查询不起作用。
查询如下:
var query =
(
from t in rdb.TimeStampsCollection.AsQueryable()
where t.dt > lowDate && t.dt < highDate
select t.rbt_List
);
rdb.TimeStampsCollection 映射到名为 TimeStamp 的 C# class。除了 BSonObjectId,class 包含一个 DateTime 和来自一个名为 RobotTimeStamps 的 class 的 objects 列表。
public class TimeStamp
{
public BsonObjectId Id;
public DateTime dt;
public List<RobotTimeStamp> rbt_List;
public TimeStamp(DateTime date)
{
this.dt = date;
this.rbt_List = new List<RobotTimeStamp>();
}
}
public class RobotTimeStamp
{
public BsonObjectId Id;
public int robotID;
public int productionCellId;
public DateTime timeStamp;
public double p1;
public double p2;
public double p3;
public double q1;
public double q2;
public double q3;
public double s1;
public double s2;
public double s3;
public double pf1;
public double pf2;
public double pf3;
// constructor
}
所以我尝试 运行 的查询不起作用。它从来没有 returns 我 collection 的任何文件。目前 DateTime lowDate 和 highDate 的设置精度为秒。有趣的是,如果我使用 built-in DateTime.Now 设置 DateTime,则查询有效。
// Not working
DateTime lowDate = new DateTime(2015,3,26,22,27,0);
DateTime highDate = new DateTime(2015,3,26,22,30,0);
//working
DateTime lowDate = DateTime.Now.AddMinutes(-10);
DateTime highDate = DateTime.Now.AddMinutes(-1);
如 post 开头所述,我以前能够通过如上所示设置 DateTime 值来获得所需的结果。但是,对于我当前的数据库结构,这是行不通的。
所以可能有更好的方法来解决这个问题,但这对我有用。
DateTime ownLow = new DateTime(2015, 3, 28, 21, 28, 13, 0);
DateTime ownHigh = new DateTime(2015, 3, 28, 21, 28, 20, 0);
string stringLow = ownLow.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ");
string stringHigh = ownHigh.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ");
DateTime lowDate = Convert.ToDateTime(stringLow);
DateTime highDate = Convert.ToDateTime(stringHigh);
为了使此查询正常工作,我必须创建 DateTime,将其解析为字符串,然后将其转换回 DateTime 值。
我是 MongoDB 的新手,我 运行 遇到了一个查询问题。该查询尝试查找 2 个 DateTime 值之间的所有文档。我以前能够 运行 具有所需结果的类似查询,但是使用不同的数据库模式。通过对我当前的数据库模式应用相同的查询,查询不起作用。 查询如下:
var query =
(
from t in rdb.TimeStampsCollection.AsQueryable()
where t.dt > lowDate && t.dt < highDate
select t.rbt_List
);
rdb.TimeStampsCollection 映射到名为 TimeStamp 的 C# class。除了 BSonObjectId,class 包含一个 DateTime 和来自一个名为 RobotTimeStamps 的 class 的 objects 列表。
public class TimeStamp
{
public BsonObjectId Id;
public DateTime dt;
public List<RobotTimeStamp> rbt_List;
public TimeStamp(DateTime date)
{
this.dt = date;
this.rbt_List = new List<RobotTimeStamp>();
}
}
public class RobotTimeStamp
{
public BsonObjectId Id;
public int robotID;
public int productionCellId;
public DateTime timeStamp;
public double p1;
public double p2;
public double p3;
public double q1;
public double q2;
public double q3;
public double s1;
public double s2;
public double s3;
public double pf1;
public double pf2;
public double pf3;
// constructor
}
所以我尝试 运行 的查询不起作用。它从来没有 returns 我 collection 的任何文件。目前 DateTime lowDate 和 highDate 的设置精度为秒。有趣的是,如果我使用 built-in DateTime.Now 设置 DateTime,则查询有效。
// Not working
DateTime lowDate = new DateTime(2015,3,26,22,27,0);
DateTime highDate = new DateTime(2015,3,26,22,30,0);
//working
DateTime lowDate = DateTime.Now.AddMinutes(-10);
DateTime highDate = DateTime.Now.AddMinutes(-1);
如 post 开头所述,我以前能够通过如上所示设置 DateTime 值来获得所需的结果。但是,对于我当前的数据库结构,这是行不通的。
所以可能有更好的方法来解决这个问题,但这对我有用。
DateTime ownLow = new DateTime(2015, 3, 28, 21, 28, 13, 0);
DateTime ownHigh = new DateTime(2015, 3, 28, 21, 28, 20, 0);
string stringLow = ownLow.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ");
string stringHigh = ownHigh.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ");
DateTime lowDate = Convert.ToDateTime(stringLow);
DateTime highDate = Convert.ToDateTime(stringHigh);
为了使此查询正常工作,我必须创建 DateTime,将其解析为字符串,然后将其转换回 DateTime 值。