Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

$setWindowFields (agregação)

Nesta página

  • Definição
  • Sintaxe
  • Comportamento
  • Operadores de Janela
  • Restrições
  • Exemplos
$setWindowFields

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.

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 $setWindowFields, o grupo de documentos é conhecido como partição. O padrão é uma partição para toda a coleção.

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 $sort. O padrão não está classificando.

Obrigatório

Especifica o(s) campo(s) a ser(em) anexado(s) aos documentos no resultado retornado pelo estágio $setWindowFields. Cada campo é definido como o resultado retornado pelo operador de blocos.

Um campo pode conter pontos para especificar campos de documento incorporados e campos de array. A semântica da notação pontilhada do documento incorporado no estágio $setWindowFields é a mesma dos estágios $addFields e $set. Consulte exemplo de documento incorporado $addFields e exemplo de documento incorporado $set.

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:

  • A string "current" para a posição atual do documento no resultado.

  • A string "unbounded" para a posição do primeiro ou último documento na partição.

  • Um número inteiro para uma posição relativa ao documento atual. Use um número inteiro negativo para uma posição antes do documento atual. Use um número inteiro positivo para uma posição após o documento atual. 0 é a posição atual do documento.

Consulte Exemplos de janelas de documentos.

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:

  • A string "current" para a posição atual do documento no resultado.

  • A string "unbounded" para a posição do primeiro ou último documento na partição.

  • Um número a ser adicionado ao valor do campo sortBy do documento atual. Um documento estará na janela se o valor do campo sortBy estiver inclusive dentro dos limites inferior e superior.

Consulte Exemplo de janela de faixa.

Opcional

Especifica as unidades para os limites da janela de faixa de tempo. Pode-se definir como uma destas strings:

  • "year"

  • "quarter"

  • "month"

  • "week"

  • "day"

  • "hour"

  • "minute"

  • "second"

  • "millisecond"

No caso de omissão, os limites numéricos padrão da janela de faixa serão usados.

Consulte Exemplos de janela de faixa de tempo.

Dica

Veja também:

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.

Esses operadores podem ser utilizados com o estágio $setWindowFields:

Restrições para o estágio $setWindowFields:

  • Antes do MongoDB 5.3, o estágio $setWindowFields não pode ser usado:

  • sortBy é necessário para:

  • 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:

  • 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:

    • Para $count e $sum, o valor retornado é 0.

    • Para $addToSet e $push, o valor retornado é uma array vazia.

    • Para todos os outros operadores, o valor retornado é null.

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.

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 por state. Existem divisões para CA e WA.

  • sortBy: { orderDate: 1 } ordena os documentos em cada partição por orderDate em ordem crescente (1), de modo que o orderDate mais antigo seja o primeiro.

  • output:

    • Define o campo cumulativeQuantityForState para o quantity cumulativo para cada state, 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 documento current. Isso significa que $sum retorna a quantity 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 }

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 em orderDate. Existem partições para 2019, 2020 e 2021.

  • sortBy: { orderDate: 1 } ordena os documentos em cada partição por orderDate em ordem crescente (1), de modo que o orderDate mais antigo seja o primeiro.

  • output:

    • Define o campo cumulativeQuantityForYear para o quantity 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 documento current. Isso significa que $sum retorna a quantity 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 }

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 em orderDate. Existem partições para 2019, 2020 e 2021.

  • sortBy: { orderDate: 1 } ordena os documentos em cada partição por orderDate em ordem crescente (1), de modo que o orderDate mais antigo seja o primeiro.

  • output:

    • Define o campo averageQuantity para a média móvel quantity 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 e 0. Isso significa que $avg retorna a média móvel quantity 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 }

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 em orderDate. Existem partições para 2019, 2020 e 2021.

  • sortBy: { orderDate: 1 } ordena os documentos em cada partição por orderDate em ordem crescente (1), de modo que o orderDate mais antigo seja o primeiro.

  • output:

    • Define o campo cumulativeQuantityForYear como quantity 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 documento current. 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 a quantity 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 limite unbounded. 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 }

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 por state. Existem divisões para CA e WA.

  • sortBy: { price: 1 } ordena os documentos em cada partição por price em ordem crescente (1), de modo que o price mais baixo seja o primeiro.

  • output define o campo quantityFromSimilarOrders como a soma dos valores quantity dos documentos em uma janela de faixa.

    • A janela contém documentos entre um limite inferior de -10 e um limite superior de 10. A faixa é inclusiva.

    • $sum retorna a soma de valores quantity contidos em uma faixa de mais ou menos 10 dólares do valor price do documento atual.

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 }

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 por state. Existem divisões para CA e WA.

  • sortBy: { orderDate: 1 } ordena os documentos em cada partição por orderDate em ordem crescente (1), de modo que o orderDate mais antigo seja o primeiro.

  • output:

    • Define o campo de array orderDateArrayForState para valores orderDate para os documentos em cada state. Os elementos de array são expandidos com adições aos elementos anteriores na array.

    • Usa $push para retornar uma array de valores orderDate dos documentos em uma janela de faixa.

  • A janela contém documentos entre um limite inferior unbounded e um limite superior definido como 10 (10 meses após o valor orderDate do documento atual) usando uma unidade de intervalo de tempo.

  • $push retorna a array de valores orderDate para os documentos entre o início da partição e os documentos com valores orderDate inclusive em uma faixa do valor orderDate do documento atual mais 10 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") ] }

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 por state. Existem divisões para CA e WA.

  • sortBy: { orderDate: 1 } ordena os documentos em cada partição por orderDate em ordem crescente (1), de modo que o orderDate mais antigo seja o primeiro.

  • output:

    • Define o campo de array orderDateArrayForState para valores orderDate para os documentos em cada state. Os elementos de array são expandidos com adições aos elementos anteriores na array.

    • Usa $push para retornar uma array de valores orderDate dos documentos em uma janela de faixa.

  • A janela contém documentos entre um limite inferior unbounded e um limite superior definido como -10 (10 meses antes do valor orderDate do documento atual) usando uma unidadede intervalo de tempo.

  • $push retorna a array de orderDate valores para os documentos entre o início da partição e os documentos com valores orderDate inclusive em uma faixa do valor orderDate do documento atual menos 10 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.

Voltar

$set