我工作的转换我的博客上使用/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日期”? 我只希望这样做,如果指数没有约会什么的正常工作
您的DateTime是否可以在蒙戈表示的语法如下;
ISODate("2012-10-11T17:33:51.994Z")
这是规范的,可排序的格式。 因此,它与今年开始,然后一个月,然后一天,然后小时等特点,因此它已经至少到最具体的顺序。 有几件事情你可以用这个做。
- 你可以做字符串分析过它,只是使用字符串的第一部分。 但是,这不是太聪明。
- 你可以简单地复制的年份和月份作为单独的领域, 除了 ISODate()。 这里的好处是,你可以直接引用这些领域,你可以索引他们明确。
- 最后,可以使用一定范围的搜索,对此速记可以如此使用;
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)
));
我开始之前,我想确认我理解正确你的问题。 您目前存储日期中的日期/时间格式,而是希望能够在一个更小细粒度的方式使用和对日期进行查询。 如果这是你想知道什么,然后我对你有一些好消息:这一切都是在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?