DocumentDB查询以查找创建日期

时间:2018-03-08 07:21:40

标签: c# azure-cosmosdb

我想检索仅包含documentID和文档Created DateTime详细信息的文档。我可以通过以下查询获取DocumentID,但是我们如何才能获得Document创建的日期时间。

select c.id from c

然而,除了id,我还需要获取文档创建日期

对此有任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:3)

  

我可以通过以下查询获取DocumentID,但我们如何获得   文档创建了日期时间。

从此官方doc开始,文档在创建时自动生成的属性仅包含以下内容:_rid,_etag,_ts,_self,id.

_ts表示资源的上次更新时间戳,因此如果此文档尚未更新,则此时间为createTime。您可以通过Select c.id,c._ts from c进行查询。

因此,您可能需要在创建文档时自己记录createTime,以便稍后查询createTime

希望它对你有所帮助。

id_ts或其他自定义属性(如DocumentReadingCreatedDate)是文档中的所有属性,不分为系统详细信息或非系统详细信息。我上面提到的一些属性是cosmosdb将自动为您生成的字段。

所以你只需要使用sql:select c._ts from c来查找本文档的最新更新时间。您可以获得long类型的数据,例如1520216339,然后您可以将其转换为日期时间格式,例如程序中的Sun Jan 18 22:16:56 CST 1970

如果您的文档已更新,并且您必须获得文档的创建时间,则无法使用_ts字段。您只能使用自定义字段DocumentReadingCreatedDate

答案 1 :(得分:0)

_ts是Unix时间戳值。

你需要转换它。以下C#示例将执行此操作。

 private static DateTime UnixTimeStampToDateTime(long unixTimeStamp) 
{
   System.DateTime dtDateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
   dtDateTime = dtDateTime.AddMilliseconds(unixTimeStamp);
   return dtDateTime;
}

或者您可以创建可在查询中使用的UFD,以下是可以使用的UFD

function epochToDate (ts) {
  return new Date(ts*1000);
}

您可以按如下方式使用它:

SELECT * FROM c WHERE udf.epochToDate(c._ts) == ....