如何解决一个年/月/日日期到更为具体的日期与时间的MongoDB数据?(How do I resol

2019-08-01 08:22发布

我工作的转换我的博客上使用/year/month/day式的URL。 我碰到一个非常糟糕的问题,这个概念虽然。 我想只有到时/分的分辨率,但当然我所有的条目存储与具体越好全时(我不想改变这种状况)。

我去究竟如何,有关解决一个具体日期不太特定日期的MongoDB? 我使用的.Net 10gen的官方MongoDB的映射。

我的数据模型是这样的:

public class BlogEntryData
{
    [BsonId]
    public ObjectId ID;
    public string Title;
    public string Text;
    public DateTime Posted;
    public DateTime Edited;
    public List<string> Tags;
    [BsonDefaultValue(true)]
    public bool Publish;
}

我得到使用我的博客条目

var c=Config.GetDB().GetCollection<BlogEntryData>("entries");
BlogEntryData entry;
try
{
    entry=c.FindOneByIdAs<BlogEntryData>(new ObjectId(RouteParams["id"]));
}
catch
{
    throw new HttpException(404,"Blog entry not found");
}

if(entry==null)
{
    throw new HttpException(404,"Blog entry not found");
}

我知道如何去改变它,而不是使用ID就像一个数值搜索领域或什么,但我从来没有对查询日期。

另外,顺便说一句,那会是更好的存储非规范化在我的入门型号字符串中的“URL日期”? 我只希望这样做,如果指数没有约会什么的正常工作

Answer 1:

您的DateTime是否可以在蒙戈表示的语法如下;

ISODate("2012-10-11T17:33:51.994Z")

这是规范的,可排序的格式。 因此,它与今年开始,然后一个月,然后一天,然后小时等特点,因此它已经至少到最具体的顺序。 有几件事情你可以用这个做。

  1. 你可以做字符串分析过它,只是使用字符串的第一部分。 但是,这不是太聪明。
  2. 你可以简单地复制的年份和月份作为单独的领域, 除了 ISODate()。 这里的好处是,你可以直接引用这些领域,你可以索引他们明确。
  3. 最后,可以使用一定范围的搜索,对此速记可以如此使用;

db.so.find({发布:{$ GT:ISODate( “2012年10月11日”),$ LT:ISODate( “2012年10月12日”)}})

我不会推荐1所有,但2和3会工作得很好。

顺便说一句,这两个机制将很好地翻译成C#的驱动程序。 因此,通过一个更完整的答案的方法;

        var dayOfInterest = new DateTime(2012, 10, 11);
        var rangeOfInterest = dayOfInterest.AddDays(1);

// ...

         var entries = c.FindAs<BlogEntryData>(Query.And(
                                    Query.GT("Posted", dayOfInterest),
                                    Query.LT("Posted", rangeOfInterest)
                         ));


Answer 2:

我开始之前,我想确认我理解正确你的问题。 您目前存储日期中的日期/时间格式,而是希望能够在一个更小细粒度的方式使用和对日期进行查询。 如果这是你想知道什么,然后我对你有一些好消息:这一切都是在mongodDB相当简单。

首先,你应该阅读关于这一主题的MongoDB的食谱后 ,学习如何查询和有关MongoDB的内部日期索引。

其次,一旦你在C#中的日期,它是(我相信,我试着用一些搜索,以确认,但现在还不能100%确定),在C#DateTime类。 这个类有可用于查看不同粒度的日期相当多的方法。 有关主题看更多信息Microsoft文档

希望这回答了你的问题,给你,你需要不断地享受MongoDB的工具



文章来源: How do I resolve a year/month/day date to a more specific date with time data in MongoDB?