SDK數(shù)據(jù)庫 Command·聚合操作符·日期操作符

2022-05-12 17:02 更新

AggregateCommand.dateFromParts(value: any): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。給定日期的相關(guān)信息,構(gòu)建并返回一個日期對象。

參數(shù)

value: any

返回值

Object

API 說明

語法如下:

db.command.aggregate.dateFromParts({
    year: <year>,
    month: <month>,
    day: <day>,
    hour: <hour>,
    minute: <minute>,
    second: <second>,
    millisecond: <ms>,
    timezone: <tzExpression>
})

你也可以使用 ISO 8601 的標(biāo)準(zhǔn):

db.command.aggregate.dateFromParts({
    isoWeekYear: <year>,
    isoWeek: <week>,
    isoDayOfWeek: <day>,
    hour: <hour>,
    minute: <minute>,
    second: <second>,
    millisecond: <ms>,
    timezone: <tzExpression>
})

示例代碼

const $ = db.command.aggregate
db
  .collection('dates')
  .aggregate()
  .project({
    _id: 0,
    date: $.dateFromParts({
        year: 2017,
        month: 2,
        day: 8,
        hour: 12,
        timezone: 'America/New_York'
    }),
  })
  .end()

輸出如下:

{
    "date": ISODate("2017-02-08T17:00:00.000Z")
}

AggregateCommand.dateFromString(value: any): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。將一個日期/時間字符串轉(zhuǎn)換為日期對象

參數(shù)

value: any

返回值

Object

API 說明

語法如下:

db.command.aggregate.dateFromString({
    dateString: <dateStringExpression>,
    timezone: <tzExpression>
})

示例代碼

const $ = db.command.aggregate
db
  .collection('dates')
  .aggregate()
  .project({
    _id: 0,
    date: $.dateFromString({
        dateString: "2019-05-14T09:38:51.686Z"
    })
  })
  .end()

輸出如下:

{
    "date": ISODate("2019-05-14T09:38:51.686Z")
}

AggregateCommand.dateToString(value: any): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。根據(jù)指定的表達式將日期對象格式化為符合要求的字符串。

參數(shù)

value: any

返回值

Object

API 說明

dateToString 的調(diào)用形式如下:

db.command.aggregate.dateToString({
  date: <日期表達式>,
  format: <格式化表達式>,
  timezone: <時區(qū)表達式>,
  onNull: <空值表達式>
})

下面是四種表達式的詳細說明:

名稱 描述
日期表達式 必選。指定字段值應(yīng)該是能轉(zhuǎn)化為字符串的日期。
格式化表達式 可選。它可以是任何包含“格式說明符”的有效字符串。
時區(qū)表達式 可選。指明運算結(jié)果的時區(qū)。它可以解析格式為 UTC Offset 或者 Olson Timezone Identifier 的字符串。
空值表達式 可選。當(dāng) <日期表達式> 返回空或者不存在的時候,會返回此表達式指明的值。

下面是格式說明符的詳細說明:

說明符 描述 合法值
%d 月份的日期(2位數(shù),0填充) 01 - 31
%G ISO 8601 格式的年份 0000 - 9999
%H 小時(2位數(shù),0填充,24小時制) 00 - 23
%j 一年中的一天(3位數(shù),0填充) 001 - 366
%L 毫秒(3位數(shù),0填充) 000 - 999
%m 月份(2位數(shù),0填充) 01 - 12
%M 分鐘(2位數(shù),0填充) 00 - 59
%S 秒(2位數(shù),0填充) 00 - 60
%w 星期幾 1 - 7
%u ISO 8601 格式的星期幾 1 - 7
%U 一年中的一周(2位數(shù),0填充) 00 - 53
%V ISO 8601 格式的一年中的一周 1 - 53
%Y 年份(4位數(shù),0填充) 0000 - 9999
%z 與 UTC 的時區(qū)偏移量 +/-[hh][mm]
%Z 以分鐘為單位,與 UTC 的時區(qū)偏移量 +/-mmm
%% 百分號作為字符 %

示例代碼

假設(shè)集合 students 有如下記錄:

{ "date": "1999-12-11T16:00:00.000Z", "firstName": "Yuanxin", "lastName": "Dong" }
{ "date": "1998-11-10T16:00:00.000Z", "firstName": "Weijia", "lastName": "Wang" }
{ "date": "1997-10-09T16:00:00.000Z", "firstName": "Chengxi", "lastName": "Li" }

格式化日期

下面是將 date 字段的值,格式化成形如 年份-月份-日期 的字符串:

const $ = db.command.aggregate
db
  .collection('students')
  .aggregate()
  .project({
    _id: 0,
    formatDate: $.dateToString({
      date: '$date',
      format: '%Y-%m-%d'
    })
  })
  .end()

返回的結(jié)果如下:

{ "formatDate": "1999-12-11" }
{ "formatDate": "1998-11-10" }
{ "formatDate": "1997-10-09" }

時區(qū)時間

下面是將 date 字段值格式化為上海時區(qū)時間的例子:

const $ = db.command.aggregate
db
  .collection('students')
  .aggregate()
  .project({
    _id: 0,
    formatDate: $.dateToString({
      date: '$date',
      format: '%H:%M:%S',
      timezone: 'Asia/Shanghai'
    })
  })
  .end()

返回的結(jié)果如下:

{ "formatDate": "00:00:00" }
{ "formatDate": "00:00:00" }
{ "formatDate": "00:00:00" }

缺失情況的默認值

當(dāng)指定的 <日期表達式> 返回空或者不存在的時候,可以設(shè)置缺失情況下的默認值:

const $ = db.command.aggregate
db
  .collection('students')
  .aggregate()
  .project({
    _id: 0,
    formatDate: $.dateToString({
      date: '$empty',
      onNull: 'null'
    })
  })
  .end()

返回的結(jié)果如下:

{ "formatDate": "null" }
{ "formatDate": "null" }
{ "formatDate": "null" }

AggregateCommand.dayOfMonth(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。返回日期字段對應(yīng)的天數(shù)(一個月中的哪一天),是一個介于 1 至 31 之間的數(shù)字。

參數(shù)

value: Expression<string>

日期字段

返回值

Object

API 說明

語法如下:

db.command.aggregate.dayOfMonth(<日期字段>)

示例代碼

假設(shè)集合 dates 有以下文檔:

{
    "_id": 1,
    "date": ISODate("2019-05-14T09:38:51.686Z")
}

我們使用 dayOfMonth() 對 date 字段進行投影,獲取對應(yīng)的日期:

const $ = db.command.aggregate
db
  .collection('dates')
  .aggregate()
  .project({
    _id: 0,
    dayOfMonth: $.dayOfMonth('$date')
  })
  .end()

輸出如下:

{
    "dayOfMonth": 14
}

AggregateCommand.dayOfWeek(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。返回日期字段對應(yīng)的天數(shù)(一周中的第幾天),是一個介于 1(周日)到 7(周六)之間的整數(shù)。

參數(shù)

value: Expression<string>

日期字段

返回值

Object

API 說明

注意:周日是每周的第 1 天*

語法如下:

db.command.aggregate.dayOfWeek(<日期字段>)

示例代碼

假設(shè)集合 dates 有以下文檔:

{
    "_id": 1,
    "date": ISODate("2019-05-14T09:38:51.686Z")
}

我們使用 dayOfWeek() 對 date 字段進行投影,獲取對應(yīng)的天數(shù)(一周中的第幾天):

const $ = db.command.aggregate
db
  .collection('dates')
  .aggregate()
  .project({
    _id: 0,
    dayOfWeek: $.dayOfWeek('$date')
  })
  .end()

輸出如下:

{
    "dayOfWeek": 3
}

AggregateCommand.dayOfYear(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。返回日期字段對應(yīng)的天數(shù)(一年中的第幾天),是一個介于 1 到 366 之間的整數(shù)。

參數(shù)

value: Expression<string>

日期字段

返回值

Object

API 說明

語法如下:

db.command.aggregate.dayOfYear(<日期字段>)

示例代碼

假設(shè)集合 dates 有以下文檔:

{
    "_id": 1,
    "date": ISODate("2019-05-14T09:38:51.686Z")
}

我們使用 dayOfYear() 對 date 字段進行投影,獲取對應(yīng)的天數(shù)(一年中的第幾天):

const $ = db.command.aggregate
db
  .collection('dates')
  .aggregate()
  .project({
    _id: 0,
    dayOfYear: $.dayOfYear('$date')
  })
  .end()

輸出如下:

{
    "dayOfYear": 134
}

AggregateCommand.hour(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。返回日期字段對應(yīng)的小時數(shù),是一個介于 0 到 23 之間的整數(shù)。

參數(shù)

value: Expression<string>

日期字段

返回值

Object

API 說明

語法如下:

db.command.aggregate.hour(<日期字段>)

示例代碼

假設(shè)集合 dates 有以下文檔:

{
    "_id": 1,
    "date": ISODate("2019-05-14T09:38:51.686Z")
}

我們使用 hour() 對 date 字段進行投影,獲取對應(yīng)的小時數(shù):

const $ = db.command.aggregate
db
  .collection('dates')
  .aggregate()
  .project({
    _id: 0,
    hour: $.hour('$date')
  })
  .end()

輸出如下:

{
    "hour": 9
}

AggregateCommand.isoDayOfWeek(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。返回日期字段對應(yīng)的 ISO 8601 標(biāo)準(zhǔn)的天數(shù)(一周中的第幾天),是一個介于 1(周一)到 7(周日)之間的整數(shù)。

參數(shù)

value: Expression<string>

日期字段

返回值

Object

API 說明

語法如下:

db.command.aggregate.month(<日期字段>)

示例代碼

假設(shè)集合 dates 有以下文檔:

{
    "_id": 1,
    "date": ISODate("2019-05-14T09:38:51.686Z")
}

我們使用 month() 對 date 字段進行投影,獲取對應(yīng)的 ISO 8601 標(biāo)準(zhǔn)的天數(shù)(一周中的第幾天):

const $ = db.command.aggregate
db
  .collection('dates')
  .aggregate()
  .project({
    _id: 0,
    isoDayOfWeek: $.isoDayOfWeek('$date')
  })
  .end()

輸出如下:

{
    "isoDayOfWeek": 2
}

AggregateCommand.isoWeek(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。返回日期字段對應(yīng)的 ISO 8601 標(biāo)準(zhǔn)的周數(shù)(一年中的第幾周),是一個介于 1 到 53 之間的整數(shù)。

參數(shù)

value: Expression<string>

日期字段

返回值

Object

API 說明

根據(jù) ISO 8601 標(biāo)準(zhǔn),周一到周日視為一周,本年度第一個周四所在的那周,視為本年度的第 1 周。

例如:2016 年 1 月 7 日是那年的第一個周四,那么 2016.01.04(周一)到 2016.01.10(周日) 即為第 1 周。同理,2016 年 1 月 1 日的周數(shù)為 53。

語法如下:

db.command.aggregate.isoWeek(<日期字段>)

示例代碼

假設(shè)集合 dates 有以下文檔:

{
    "_id": 1,
    "date": ISODate("2019-05-14T09:38:51.686Z")
}

我們使用 isoWeek() 對 date 字段進行投影,獲取對應(yīng)的 ISO 8601 標(biāo)準(zhǔn)的周數(shù)(一年中的第幾周):

const $ = db.command.aggregate
db
  .collection('dates')
  .aggregate()
  .project({
    _id: 0,
    isoWeek: $.isoWeek('$date')
  })
  .end()

輸出如下:

{
    "isoWeek": 20
}

AggregateCommand.isoWeekYear(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。返回日期字段對應(yīng)的 ISO 8601 標(biāo)準(zhǔn)的天數(shù)(一年中的第幾天)。

參數(shù)

value: Expression<string>

日期字段

返回值

Object

API 說明

此處的“年”以第一周的周一為開始,以最后一周的周日為結(jié)束。

語法如下:

db.command.aggregate.isoWeekYear(<日期字段>)

示例代碼

假設(shè)集合 dates 有以下文檔:

{
    "_id": 1,
    "date": ISODate("2019-05-14T09:38:51.686Z")
}

我們使用 isoWeekYear() 對 date 字段進行投影,獲取對應(yīng)的 ISO 8601 標(biāo)準(zhǔn)的天數(shù)(一年中的第幾天):

const $ = db.command.aggregate
db
  .collection('dates')
  .aggregate()
  .project({
    _id: 0,
    isoWeekYear: $.isoWeekYear('$date')
  })
  .end()

輸出如下:

{
    "isoWeekYear": 2019
}

AggregateCommand.millisecond(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。返回日期字段對應(yīng)的毫秒數(shù),是一個介于 0 到 999 之間的整數(shù)。

參數(shù)

value: Expression<string>

日期字段

返回值

Object

API 說明

語法如下:

db.command.aggregate.millisecond(<日期字段>)

示例代碼

假設(shè)集合 dates 有以下文檔:

{
    "_id": 1,
    "date": ISODate("2019-05-14T09:38:51.686Z")
}

我們使用 millisecond() 對 date 字段進行投影,獲取對應(yīng)的毫秒數(shù):

const $ = db.command.aggregate
db
  .collection('dates')
  .aggregate()
  .project({
    _id: 0,
    millisecond: $.millisecond('$date'),
  })
  .end()

輸出如下:

{
    "millisecond": 686
}

AggregateCommand.minute(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。返回日期字段對應(yīng)的分鐘數(shù),是一個介于 0 到 59 之間的整數(shù)。

參數(shù)

value: Expression<string>

日期字段

返回值

Object

API 說明

語法如下:

db.command.aggregate.minute(<日期字段>)

示例代碼

假設(shè)集合 dates 有以下文檔:

{
    "_id": 1,
    "date": ISODate("2019-05-14T09:38:51.686Z")
}

我們使用 minute() 對 date 字段進行投影,獲取對應(yīng)的分鐘數(shù):

const $ = db.command.aggregate
db
  .collection('dates')
  .aggregate()
  .project({
    _id: 0,
    minute: $.minute('$date')
  })
  .end()

輸出如下:

{
    "minute": 38
}

AggregateCommand.month(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。返回日期字段對應(yīng)的月份,是一個介于 1 到 12 之間的整數(shù)。

參數(shù)

value: Expression<string>

日期字段

返回值

Object

API 說明

語法如下:

db.command.aggregate.month(<日期字段>)

示例代碼

假設(shè)集合 dates 有以下文檔:

{
    "_id": 1,
    "date": ISODate("2019-05-14T09:38:51.686Z")
}

我們使用 month() 對 date 字段進行投影,獲取對應(yīng)的月份:

const $ = db.command.aggregate
db
  .collection('dates')
  .aggregate()
  .project({
    _id: 0,
    month: $.month('$date')
  })
  .end()

輸出如下:

{
    "month": 5
}

AggregateCommand.second(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。返回日期字段對應(yīng)的秒數(shù),是一個介于 0 到 59 之間的整數(shù),在特殊情況下(閏秒)可能等于 60。

參數(shù)

value: Expression<string>

日期字段

返回值

Object

API 說明

語法如下:

db.command.aggregate.second(<日期字段>)

示例代碼

假設(shè)集合 dates 有以下文檔:

{
    "_id": 1,
    "date": ISODate("2019-05-14T09:38:51.686Z")
}

我們使用 second() 對 date 字段進行投影,獲取對應(yīng)的秒數(shù):

const $ = db.command.aggregate
db
  .collection('dates')
  .aggregate()
  .project({
    _id: 0,
    second: $.second('$date')
  })
  .end()

輸出如下:

{
    "second": 51
}

AggregateCommand.week(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。返回日期字段對應(yīng)的周數(shù)(一年中的第幾周),是一個介于 0 到 53 之間的整數(shù)。

參數(shù)

value: Expression<string>

日期字段

返回值

Object

API 說明

每周以周日為開頭,每年的第一個周日即為 week 1 的開始,這天之前是 week 0。

語法如下:

db.command.aggregate.week(<日期字段>)

示例代碼

假設(shè)集合 dates 有以下文檔:

{
    "_id": 1,
    "date": ISODate("2019-05-14T09:38:51.686Z")
}

我們使用 week() 對 date 字段進行投影,獲取對應(yīng)的周數(shù)(一年中的第幾周):

const $ = db.command.aggregate
db
  .collection('dates')
  .aggregate()
  .project({
    _id: 0,
    week: $.week('$date')
  })
  .end()

輸出如下:

{
    "week": 19
}

AggregateCommand.year(value: Expression<string>): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。返回日期字段對應(yīng)的年份。

參數(shù)

value: Expression<string>

日期字段

返回值

Object

API 說明

語法如下:

db.command.aggregate.year(<日期字段>)

示例代碼

假設(shè)集合 dates 有以下文檔:

{
    "_id": 1,
    "date": ISODate("2019-05-14T09:38:51.686Z")
}

我們使用 year() 對 date 字段進行投影,獲取對應(yīng)的年份:

const $ = db.command.aggregate
db
  .collection('dates')
  .aggregate()
  .project({
    _id: 0,
    year: $.year('$date')
  })
  .end()

輸出如下:

{
    "year": 2019
}

AggregateCommand.subtract(value: Expression[]): Object

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合操作符。將兩個數(shù)字相減然后返回差值,或?qū)蓚€日期相減然后返回相差的毫秒數(shù),或?qū)⒁粋€日期減去一個數(shù)字返回結(jié)果的日期。

參數(shù)

value: Expression[]

[<expression1>, <expression2>]

返回值

Object

API 說明

語法如下:

db.command.aggregate.subtract([<expression1>, <expression2>])

參數(shù)可以是任意解析為數(shù)字或日期的表達式。

示例代碼

假設(shè)集合 scores 有如下記錄:

{ "_id": 1, "max": 10, "min": 1 }
{ "_id": 2, "max": 7, "min": 5 }
{ "_id": 3, "max": 6, "min": 6 }

求各個記錄的 max 和 min 的差值。:

const $ = db.command.aggregate
db.collection('scores').aggregate()
  .project({
    diff: $.subtract(['$max', '$min'])
  })
  .end()

返回結(jié)果如下:

{ "_id": 1, "diff": 9 }
{ "_id": 2, "diff": 2 }
{ "_id": 3, "diff": 0 }


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號