我想检索仅包含documentID和文档Created DateTime详细信息的文档。我可以通过以下查询获取DocumentID,但是我们如何才能获得Document创建的日期时间。
select c.id from c
然而,除了id,我还需要获取文档创建日期
对此有任何帮助表示赞赏!
答案 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) == ....