Formatar o objeto retornado do grupo MongoDB / Mongoose por

Espaço profundo

Tenho um MongoDB com documentos no formato:

{
    ...
    "template" : "templates/Template1.html",
    ...
}

onde templateou é "templates/Template1.html", "templates/Template2.html"ou "templates/Template3.html".

Estou usando esta consulta para agrupar templatee contar quantas vezes cada um templateé usado:

var group = {
        key:{'template':1},
        reduce: function(curr, result){ result.count++ },
        initial: { count: 0 }
    };

    messageModel.collection.group(group.key, null, group.initial, group.reduce, null, true, cb);

Estou recebendo o resultado correto, mas está formatado assim:

{
    "0" : {
        "template" : "templates/Template1.html",
        "count" : 2 },
    "1" : {
        "template" : "templates/Template2.html",
        "count" : 2 },
    "2" : {
        "template" : "templates/Template3.html",
         "count" : 1 }
}

Eu queria saber se é possível alterar a consulta para que ela retorne algo como:

{
    "templates/Template1.html" : { "count" : 2 },
    "templates/Template2.html" : { "count" : 2 },
    "templates/Template3.html" : { "count" : 1 }
}

ou mesmo:

{
    "templates/Template1.html" : 2 ,
    "templates/Template2.html" : 2 ,
    "templates/Template3.html" : 1
}

Prefiro alterar a consulta e não analisar o objeto retornado da consulta original.

Jason Cust

Conforme mencionado por Blakes Seven nos comentários, você pode usar em aggregate()vez de group()atingir quase o resultado desejado.

messageModel.collection.aggregate([
  { // Group the collection by `template` and count the occurrences
    $group: {
      _id: "$template",
      count: { $sum: 1 }
    }
  },
  { // Format the output
    $project: {
      _id: 0,
      template: "$_id",
      count: 1
    }
  },
  { // Sort the formatted output
    $sort: { template: 1 }
  } 
]);

A saída ficaria assim:

[
  {
    "template" : "templates/Template1.html",
    "count" : 2 },
  {
    "template" : "templates/Template2.html",
    "count" : 2 },
  {
    "template" : "templates/Template3.html",
    "count" : 1 }
  }
]

Novamente, conforme declarado por Blakes nos comentários, o banco de dados só pode gerar uma série de objetos, em vez de um objeto solitário. Essa seria uma transformação que você precisaria fazer fora do banco de dados.

Acho que merece ser reafirmado que essa transformação produz um antipadrão e deve ser evitada. Um nome de chave de objeto fornece o contexto ou a descrição do valor. Usar a localização de um arquivo como nome-chave seria uma descrição bastante vaga, enquanto 'modelo' fornece um pouco mais de informação sobre o que esse valor representa.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Teste de Unidade - Afirma objeto retornado por uma ação do controlador

Python - como acessar o estado atual do objeto do tipo range retornado por range ()?

Por que o estado retornado do meu redutor é um objeto vazio ?? (React-Redux)

Grupo de agregação do MongoDB por campo agrupando vários casos no mesmo grupo

Alteração percentual no objeto Groupby por grupo

Grupo aninhado Mongodb para o mesmo objeto

Por que estou recebendo o erro "o construtor deve preservar a classe do objeto retornado"?

Use o objeto retornado por readYaml do arquivo em Declarative Jenkinsfile

Grupo de agregação do MongoDB com a soma dos valores do objeto array de vários documentos e contagem por grupo

Não é possível alterar o objeto retornado da consulta do mongoose?

Como posso deletar uma propriedade do objeto retornado por mongoose

JavaScript: a função cria arrays como valores do objeto retornado

Destruição do objeto retornado pelo resultado da consulta mongodb

Diferença entre o objeto FileIO e o objeto retornado por open (nome do arquivo, modo)

Por que um objeto sai do escopo quando passado como um ponteiro, mas não quando é retornado

Implementação do Mongoose para relacionamento referenciado por documento no MongoDB

Quando um objeto retornado por referência é destruído?

Indefinido retornado do objeto

Formatar CSV do objeto

Escolha o primeiro elemento do grupo do objeto groupby por índice sem converter para a lista

Por que o id do objeto retornado por session._get_current_object () é alterado em cada solicitação, enquanto o id da sessão permanece inalterado?

Objeto retornado por PHP Parse

Use o objeto retornado do controlador laravel no modelo vue

Nim: Não é possível acessar os campos do objeto retornado por um procedimento

Como imprimir o objeto retornado por PyRun_String?

Como acessar o objeto retornado do controlador groovy no arquivo JS

o id do objeto retornado por meio da caixa de seleção adiciona espaço extra na string de id

Grupo de agregação do MongoDB por vários campos

Recupere o valor do objeto JSON retornado em Java