$setWindowFields (agregação)
Definição
Novidades na versão 5.0.
Executa operações em um intervalo especificado de documentos em uma coleção, conhecido como janela, e retorna os resultados com base no operador de blocos escolhido.
Por exemplo, você pode utilizar o estágio $setWindowFields
para produzir o:
Diferença nas vendas entre dois documentos em uma coleção.
Classificações de vendas.
Total cumulativo de vendas.
Análise de informações complexas de séries temporais sem exportar os dados para um banco de dados externo.
Sintaxe
A sintaxe de estágio $setWindowFields
:
{ $setWindowFields: { partitionBy: <expression>, sortBy: { <sort field 1>: <sort order>, <sort field 2>: <sort order>, ..., <sort field n>: <sort order> }, output: { <output field 1>: { <window operator>: <window operator parameters>, window: { documents: [ <lower boundary>, <upper boundary> ], range: [ <lower boundary>, <upper boundary> ], unit: <time unit> } }, <output field 2>: { ... }, ... <output field n>: { ... } } } }
O estágio $setWindowFields
toma um documento com estes campos:
Campo | necessidade | Descrição |
---|---|---|
Opcional | Especifica uma expressão para agrupar os documentos. No estágio, o grupo de | |
Necessário para alguns operadores (consulte Restrições) | Especifica o(s) campo(s) para classificar os documentos na partição. Usa a mesma sintaxe do estágio | |
Obrigatório | Especifica o(s) campo(s) a ser anexado(s) aos documentos no resultado retornado pelo Um campo pode conter pontos para especificar campos de documento incorporado e campos de array. A semântica da notação pontilhada do documento incorporado no
| |
Opcional | Especifica os parâmetros e limites da janela. Os limites da janela são inclusivos. O padrão é uma janela sem limite, que inclui todos os documentos na partição. Especifique uma janela de documentos ou faixa. | |
Opcional | Uma janela onde os limites inferior e superior são especificados em relação à posição do documento atual lido na collection. Os limites da janela são especificados usando uma array de dois elementos contendo uma string ou número inteiro de limite inferior e superior. Usar:
| |
Opcional | Uma janela onde os limites inferior e superior são definidos utilizando uma faixa de valores baseada no campo sortBy no documento atual. Os limites da janela são especificados usando uma array de dois elementos contendo uma string ou número de limite inferior e superior. Usar:
| |
Opcional | Especifica as unidades para os limites da janela de faixa de tempo. Pode-se definir como uma destas strings:
No caso de omissão, os limites numéricos padrão da janela de faixa serão usados. |
Comportamento
O estágio $setWindowFields
acrescenta novos campos aos documentos existentes. Você pode incluir um ou mais estágios $setWindowFields
em uma operação de agregação.
A partir do MongoDB 5.3, você pode usar o estágio $setWindowFields
com transações e a preocupação de leitura "snapshot"
.
O estágio $setWindowFields
não garante a ordem dos documentos retornados.
Operadores de Janela
Esses operadores podem ser utilizados com o estágio $setWindowFields
:
Operadores acumuladores:
$addToSet
,$avg
,$bottom
,$bottomN
,$count
,$covariancePop
,$covarianceSamp
,$derivative
,$expMovingAvg
,$firstN
,$integral
,$lastN
,$max
,$maxN
,$min
,$minN
,$push
,$stdDevSamp
,$stdDevPop
,$sum
,$top
,$topN
.
Operadores de preenchimento de lacunas:
$linearFill
e$locf
.
Operadores de classificação:
$denseRank
,$documentNumber
e$rank
.
Restrições
Restrições para o estágio $setWindowFields
:
Antes do MongoDB 5.3, o estágio
$setWindowFields
não pode ser usado:Dentro de transações.
Com a read concern
"snapshot"
.
sortBy é necessário para:
classifique e ordene operadores de blocos.
Janelas com limites (uma janela de documentos ou uma janela de faixa).
$linearFill
operador.
As janelas de faixa exigem que todos os valores sortBy sejam números.
As janelas de faixa de tempo exigem que todos os valores de sortBy sejam datas.
As janelas de faixa e faixa de tempo só podem conter um campo sortBy e a ordem deve ser ascendente.
Você não pode especificar uma janela de documentos e uma janela de faixa.
Estes operadores usam uma janela implícita e retornam um erro se você especificar uma opção de janela:
Operadores de classificação.
$shift
operador.
No caso das janelas de faixa, somente números na faixa especificada são incluídos na janela. Valores ausentes, indefinidos e
null
são excluídos.Para janelas de faixa de tempo:
Somente tipos de data e hora são incluídos na janela.
Os valores de limite numéricos devem ser inteiros. Por exemplo, você pode usar 2 horas como limite, mas não pode usar 1,5 hora.
Para janelas vazias ou janelas com valores incompatíveis (por exemplo, utilizando
$sum
em strings), o valor retornado depende do operador:
Exemplos
Crie uma collection cakeSales
que contenha vendas de bolo nos estados da Califórnia (CA
) e de Washington (WA
):
db.cakeSales.insertMany( [ { _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"), state: "CA", price: 13, quantity: 120 }, { _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"), state: "WA", price: 14, quantity: 140 }, { _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"), state: "CA", price: 12, quantity: 145 }, { _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"), state: "WA", price: 13, quantity: 104 }, { _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"), state: "CA", price: 41, quantity: 162 }, { _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"), state: "WA", price: 43, quantity: 134 } ] )
Os exemplos a seguir usam a collection cakeSales
.
Exemplos de janelas de documentos
Use a janela de documentos para obter a quantidade cumulativa para cada estado
Este exemplo usa uma janela de documentos em $setWindowFields
para emitir as vendas cumulativas de bolos quantity
de cada state
:
db.cakeSales.aggregate( [ { $setWindowFields: { partitionBy: "$state", sortBy: { orderDate: 1 }, output: { cumulativeQuantityForState: { $sum: "$quantity", window: { documents: [ "unbounded", "current" ] } } } } } ] )
No exemplo:
partitionBy: "$state"
divide os documentos da coleção porstate
. Existem divisões paraCA
eWA
.sortBy: { orderDate: 1 }
ordena os documentos em cada partição pororderDate
em ordem crescente (1
), de modo que oorderDate
mais antigo seja o primeiro.
output
:Define o campo
cumulativeQuantityForState
para oquantity
cumulativo para cadastate
, o que aumenta sucessivamente ao valor anterior na partição.Calcula o
quantity
cumulativo utilizando o operador$sum
executado em uma janela de documentos.A janela contém documentos entre um limite inferior
unbounded
e o documentocurrent
. Isso significa que$sum
retorna aquantity
cumulativa dos documentos entre o início da partição e o documento atual.
Neste exemplo de resultado, o quantity
cumulativo para CA
e WA
é mostrado no campo cumulativeQuantityForState
:
{ "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"), "state" : "CA", "price" : 41, "quantity" : 162, "cumulativeQuantityForState" : 162 } { "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"), "state" : "CA", "price" : 13, "quantity" : 120, "cumulativeQuantityForState" : 282 } { "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"), "state" : "CA", "price" : 12, "quantity" : 145, "cumulativeQuantityForState" : 427 } { "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"), "state" : "WA", "price" : 43, "quantity" : 134, "cumulativeQuantityForState" : 134 } { "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"), "state" : "WA", "price" : 13, "quantity" : 104, "cumulativeQuantityForState" : 238 } { "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"), "state" : "WA", "price" : 14, "quantity" : 140, "cumulativeQuantityForState" : 378 }
Use a janela de documentos para obter a quantidade cumulativa para cada ano
Este exemplo usa uma janela de documentos em $setWindowFields
para gerar as vendas cumulativas de bolos quantity
para cada $year
em orderDate
:
db.cakeSales.aggregate( [ { $setWindowFields: { partitionBy: { $year: "$orderDate" }, sortBy: { orderDate: 1 }, output: { cumulativeQuantityForYear: { $sum: "$quantity", window: { documents: [ "unbounded", "current" ] } } } } } ] )
No exemplo:
partitionBy: { $year: "$orderDate" }
divide os documentos na coleção por$year
emorderDate
. Existem partições para2019
,2020
e2021
.sortBy: { orderDate: 1 }
ordena os documentos em cada partição pororderDate
em ordem crescente (1
), de modo que oorderDate
mais antigo seja o primeiro.output
:Define o campo
cumulativeQuantityForYear
para oquantity
cumulativo para cada ano, que aumenta sucessivamente o valor anterior na partição.Calcula o
quantity
cumulativo utilizando o operador$sum
executado em uma janela de documentos.A janela contém documentos entre um limite inferior
unbounded
e o documentocurrent
. Isso significa que$sum
retorna aquantity
cumulativa dos documentos entre o início da partição e o documento atual.
Neste exemplo de resultado, o quantity
cumulativo para cada ano é mostrado no campo cumulativeQuantityForYear
:
{ "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"), "state" : "WA", "price" : 43, "quantity" : 134, "cumulativeQuantityForYear" : 134 } { "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"), "state" : "CA", "price" : 41, "quantity" : 162, "cumulativeQuantityForYear" : 296 } { "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"), "state" : "WA", "price" : 13, "quantity" : 104, "cumulativeQuantityForYear" : 104 } { "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"), "state" : "CA", "price" : 13, "quantity" : 120, "cumulativeQuantityForYear" : 224 } { "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"), "state" : "CA", "price" : 12, "quantity" : 145, "cumulativeQuantityForYear" : 145 } { "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"), "state" : "WA", "price" : 14, "quantity" : 140, "cumulativeQuantityForYear" : 285 }
Use a janela de documentos para obter a quantidade média móvel para cada ano
Este exemplo utiliza uma janela de documentos em $setWindowFields
para produzir a média móvel para as vendas de bolo quantity
:
db.cakeSales.aggregate( [ { $setWindowFields: { partitionBy: { $year: "$orderDate" }, sortBy: { orderDate: 1 }, output: { averageQuantity: { $avg: "$quantity", window: { documents: [ -1, 0 ] } } } } } ] )
No exemplo:
partitionBy: "$orderDate"
divide os documentos na coleção por$year
emorderDate
. Existem partições para2019
,2020
e2021
.sortBy: { orderDate: 1 }
ordena os documentos em cada partição pororderDate
em ordem crescente (1
), de modo que oorderDate
mais antigo seja o primeiro.output
:Define o campo
averageQuantity
para a média móvelquantity
para cada ano.Calcula a média móvel
quantity
utilizando o operador$avg
executado em uma janela de documentos.A janela contém documentos entre
-1
e0
. Isso significa que$avg
retorna a média móvelquantity
entre o documento antes do documento atual (-1
) e o documento atual (0
) na partição.
Neste exemplo de resultado, a média móvel quantity
é mostrada no campo averageQuantity
:
{ "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"), "state" : "WA", "price" : 43, "quantity" : 134, "averageQuantity" : 134 } { "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"), "state" : "CA", "price" : 41, "quantity" : 162, "averageQuantity" : 148 } { "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"), "state" : "WA", "price" : 13, "quantity" : 104, "averageQuantity" : 104 } { "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"), "state" : "CA", "price" : 13, "quantity" : 120, "averageQuantity" : 112 } { "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"), "state" : "CA", "price" : 12, "quantity" : 145, "averageQuantity" : 145 } { "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"), "state" : "WA", "price" : 14, "quantity" : 140, "averageQuantity" : 142.5 }
Use a janela de documentos para obter a quantidade máxima e cumulativa para cada ano
Este exemplo usa uma janela de documentos em $setWindowFields
para gerar os valores cumulativos e máximos de vendas de bolo quantity
para cada $year
em orderDate
:
db.cakeSales.aggregate( [ { $setWindowFields: { partitionBy: { $year: "$orderDate" }, sortBy: { orderDate: 1 }, output: { cumulativeQuantityForYear: { $sum: "$quantity", window: { documents: [ "unbounded", "current" ] } }, maximumQuantityForYear: { $max: "$quantity", window: { documents: [ "unbounded", "unbounded" ] } } } } } ] )
No exemplo:
partitionBy: "$orderDate"
divide os documentos na coleção por$year
emorderDate
. Existem partições para2019
,2020
e2021
.sortBy: { orderDate: 1 }
ordena os documentos em cada partição pororderDate
em ordem crescente (1
), de modo que oorderDate
mais antigo seja o primeiro.output
:Define o campo
cumulativeQuantityForYear
comoquantity
cumulativo para cada ano.Calcula o
quantity
cumulativo utilizando o operador$sum
executado em uma janela de documentos.A janela contém documentos entre um limite inferior
unbounded
e o documentocurrent
. Isso significa que$sum
retorna a quantidade cumulativa para os documentos entre o início da partição e o documento atual.Define o campo
maximumQuantityForYear
para aquantity
máxima para cada ano.Calcula a
quantity
máxima de todos os documentos usando o operador$max
executado em uma janela de documentos.A janela contém documentos entre um
upper
inferior e limiteunbounded
. Isso significa que$max
retorna a quantidade máxima para os documentos na partição.
Neste exemplo de resultado, o quantity
cumulativo é mostrado no campo cumulativeQuantityForYear
e a quantity
máxima é mostrada no campo maximumQuantityForYear
:
{ "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"), "state" : "WA", "price" : 43, "quantity" : 134, "cumulativeQuantityForYear" : 134, "maximumQuantityForYear" : 162 } { "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"), "state" : "CA", "price" : 41, "quantity" : 162, "cumulativeQuantityForYear" : 296, "maximumQuantityForYear" : 162 } { "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"), "state" : "WA", "price" : 13, "quantity" : 104, "cumulativeQuantityForYear" : 104, "maximumQuantityForYear" : 120 } { "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"), "state" : "CA", "price" : 13, "quantity" : 120, "cumulativeQuantityForYear" : 224, "maximumQuantityForYear" : 120 } { "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"), "state" : "CA", "price" : 12, "quantity" : 145, "cumulativeQuantityForYear" : 145, "maximumQuantityForYear" : 145 } { "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"), "state" : "WA", "price" : 14, "quantity" : 140, "cumulativeQuantityForYear" : 285, "maximumQuantityForYear" : 145 }
Exemplo de janela de faixa
Este exemplo usa uma janela de faixa em $setWindowFields
para retornar a soma dos valores quantity
dos bolos vendidos para pedidos dentro de mais ou menos 10 dólares do valor price
do documento atual:
db.cakeSales.aggregate( [ { $setWindowFields: { partitionBy: "$state", sortBy: { price: 1 }, output: { quantityFromSimilarOrders: { $sum: "$quantity", window: { range: [ -10, 10 ] } } } } } ] )
No exemplo:
partitionBy: "$state"
divide os documentos da coleção porstate
. Existem divisões paraCA
eWA
.sortBy: { price: 1 }
ordena os documentos em cada partição porprice
em ordem crescente (1
), de modo que oprice
mais baixo seja o primeiro.output
define o campoquantityFromSimilarOrders
como a soma dos valoresquantity
dos documentos em uma janela de faixa.
Neste exemplo de resultado, a soma dos valores quantity
para documentos na janela é mostrada no campo quantityFromSimilarOrders
:
{ "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"), "state" : "CA", "price" : 12, "quantity" : 145, "quantityFromSimilarOrders" : 265 } { "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"), "state" : "CA", "price" : 13, "quantity" : 120, "quantityFromSimilarOrders" : 265 } { "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"), "state" : "CA", "price" : 41, "quantity" : 162, "quantityFromSimilarOrders" : 162 } { "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"), "state" : "WA", "price" : 13, "quantity" : 104, "quantityFromSimilarOrders" : 244 } { "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"), "state" : "WA", "price" : 14, "quantity" : 140, "quantityFromSimilarOrders" : 244 } { "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"), "state" : "WA", "price" : 43, "quantity" : 134, "quantityFromSimilarOrders" : 134 }
Exemplos de janelas de faixa de tempo
Usar uma janela de faixa de tempo com um limite superior positivo
O exemplo seguinte utiliza uma janela com uma unidade de faixa de tempo de limite superior positivo em $setWindowFields
. O pipeline gera uma array de valores orderDate
para cada state
que correspondem à faixa de tempo especificada.
db.cakeSales.aggregate( [ { $setWindowFields: { partitionBy: "$state", sortBy: { orderDate: 1 }, output: { recentOrders: { $push: "$orderDate", window: { range: [ "unbounded", 10 ], unit: "month" } } } } } ] )
No exemplo:
partitionBy: "$state"
divide os documentos da coleção porstate
. Existem divisões paraCA
eWA
.sortBy: { orderDate: 1 }
ordena os documentos em cada partição pororderDate
em ordem crescente (1
), de modo que oorderDate
mais antigo seja o primeiro.output
:
A janela contém documentos entre um limite inferior
unbounded
e um limite superior definido como10
(10 meses após o valororderDate
do documento atual) usando uma unidade de intervalo de tempo.$push
retorna a array de valoresorderDate
para os documentos entre o início da partição e os documentos com valoresorderDate
inclusive em uma faixa do valororderDate
do documento atual mais10
meses.
Neste exemplo de resultado, a array de valores orderDate
para CA
e WA
é mostrada no campo recentOrders
:
{ "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"), "state" : "CA", "price" : 41, "quantity" : 162, "recentOrders" : [ ISODate("2019-05-18T16:09:01Z") ] } { "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"), "state" : "CA", "price" : 13, "quantity" : 120, "recentOrders" : [ ISODate("2019-05-18T16:09:01Z"), ISODate("2020-05-18T14:10:30Z"), ISODate("2021-01-11T06:31:15Z") ] } { "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"), "state" : "CA", "price" : 12, "quantity" : 145, "recentOrders" : [ ISODate("2019-05-18T16:09:01Z"), ISODate("2020-05-18T14:10:30Z"), ISODate("2021-01-11T06:31:15Z") ] } { "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"), "state" : "WA", "price" : 43, "quantity" : 134, "recentOrders" : [ ISODate("2019-01-08T06:12:03Z") ] } { "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"), "state" : "WA", "price" : 13, "quantity" : 104, "recentOrders" : [ ISODate("2019-01-08T06:12:03Z"), ISODate("2020-02-08T13:13:23Z") ] } { "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"), "state" : "WA", "price" : 14, "quantity" : 140, "recentOrders" : [ ISODate("2019-01-08T06:12:03Z"), ISODate("2020-02-08T13:13:23Z"), ISODate("2021-03-20T11:30:05Z") ] }
Usar uma janela de faixa de tempo com limite superior negativo
O exemplo seguinte utiliza uma janela com uma unidade de faixa de tempo de limite superior negativo em $setWindowFields
. O pipeline gera uma array de valores orderDate
para cada state
que correspondem à faixa de tempo especificada.
db.cakeSales.aggregate( [ { $setWindowFields: { partitionBy: "$state", sortBy: { orderDate: 1 }, output: { recentOrders: { $push: "$orderDate", window: { range: [ "unbounded", -10 ], unit: "month" } } } } } ] )
No exemplo:
partitionBy: "$state"
divide os documentos da coleção porstate
. Existem divisões paraCA
eWA
.sortBy: { orderDate: 1 }
ordena os documentos em cada partição pororderDate
em ordem crescente (1
), de modo que oorderDate
mais antigo seja o primeiro.output
:
A janela contém documentos entre um limite inferior
unbounded
e um limite superior definido como-10
(10 meses antes do valororderDate
do documento atual) usando uma unidadede intervalo de tempo.$push
retorna a array deorderDate
valores para os documentos entre o início da partição e os documentos com valoresorderDate
inclusive em uma faixa do valororderDate
do documento atual menos10
meses.
Neste exemplo de resultado, a array de valores orderDate
para CA
e WA
é mostrada no campo recentOrders
:
{ "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"), "state" : "CA", "price" : 41, "quantity" : 162, "recentOrders" : [ ] } { "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"), "state" : "CA", "price" : 13, "quantity" : 120, "recentOrders" : [ ISODate("2019-05-18T16:09:01Z") ] } { "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"), "state" : "CA", "price" : 12, "quantity" : 145, "recentOrders" : [ ISODate("2019-05-18T16:09:01Z") ] } { "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"), "state" : "WA", "price" : 43, "quantity" : 134, "recentOrders" : [ ] } { "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"), "state" : "WA", "price" : 13, "quantity" : 104, "recentOrders" : [ ISODate("2019-01-08T06:12:03Z") ] } { "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"), "state" : "WA", "price" : 14, "quantity" : 140, "recentOrders" : [ ISODate("2019-01-08T06:12:03Z"), ISODate("2020-02-08T13:13:23Z") ] }
Dica
Veja também:
Para obter um exemplo adicional sobre IoT consumo de energia , consulte as MongoDB Aggregations práticas do e-book.