在使用ISODate范围搜索mongodb集合中的文档时,我收到错误" String未被识别为有效的DateTime"

时间:2014-12-02 09:45:08

标签: c# mongodb datetime

我正在尝试使用以下内容查询MongoDB -

List<BsonDocument> list = NoSqlBusinessEntityBase.LoadByWhereClause("peoplecounting",
    string.Concat("{siteid:\"", siteid, "\", locationid:\"", location._id ,"\",
    StartTime: {$gte:ISODate(\"",old.ToString("yyyy-mm-dd hh:mm:ss"),"\")}, 
    EndTime: {$lte:ISODate(\"",current.ToString("yyyy-MM-dd hh:mm:ss"), "\"\")}}"));

LoadByWhereClause()函数如下 -

public static List<BsonDocument> LoadDataByWhere(string table, string whereClause)
{
    var collection = db.GetCollection(table);
    QueryDocument whereDoc = new QueryDocument(BsonDocument.Parse(whereClause));
    var resultSet = collection.Find(whereDoc);
    List<BsonDocument> docs = resultSet.ToList();

    if (resultSet.Count() > 0)
    {
        foreach (BsonDocument doc in docs)
        {
            doc.Set("_id", doc.GetElement("_id").ToString().Split('=')[1]);
        }
        return docs;
    }
    else
    {
        return null;
    }
}

即使查询在MongoDB控制台中正常运行并返回文档

db.peoplecounting.find({siteid:"53f62abf66455068373665ff", locationid:"53f62bb86645506837366603",
    StartTime:{$gte:ISODate("2012-12-03 02:40:00")}, EndTime:{$lte:ISODate("2013-12-03 07:40:00")}}

当我尝试使用LoadByWhereClause函数加载C#时出现错误。在解析whereClause时,错误为String was not recognized as a valid DateTime.。 我怎么可能解决这个问题?我无法确定这里出了什么问题。

1 个答案:

答案 0 :(得分:3)

它不是完全清楚,但我怀疑问题可能就是你如何格式化日期。这样:

old.ToString("yyyy-mm-dd hh:mm:ss")

几乎可以肯定是这样的:

old.ToString("yyyy-MM-dd HH:mm:ss")

或可能

old.ToString("yyyy-MM-dd'T'HH:mm:ss")

由于:

  • mm表示分钟。您不希望年份和日期之间的分钟值;你想要月份(MM
  • hh表示“半小时”(即1-12)。你想要全天的小时,0-23(HH
  • ISO-8601使用T字面值来区分日期时间。

我注意到您的current.ToString 更好,但不正确 - 它获得正确的月份,但不是小时。这些不一致的事实是一个问题 - 我建议你写一个单独的方法来适当地转换DateTime