Конкат полей в одном - PullRequest
       9

Конкат полей в одном

0 голосов
/ 08 января 2019

У меня есть этот запрос ниже:

var query = {
    $and:
    [
        {
            uf:
            {
                $exists: true,
                $ne: ""
            }
        },
        {
            municipio:
            {
                $exists: true,
                $ne: ""
            }
        },
        {
            $or:
                [
                    {
                        email:
                        {
                            $exists: true,
                            $ne: ""
                        }
                    },
                    {
                        telefone:
                        {
                            $exists: true,
                            $ne: ""
                        }
                    }
                ]
        },
    ]
}

var mod = {
    atividade_principal: 1,
    $concat: [
        "$logradouro", ", ", "$numero", " - ", "$bairro", ", ", "$municipio", " - ", "$uf", ", ", "$cep",
    ],
    telefone: 1,
    email: 1,
    qsa: 1,
    nome: 1,
    natureza_juridica: 1,
    tipo: 1
}

db.empresas.find(query, mod).limit(1000);

и я хочу заключить эту строку:

$concat: [
    "$logradouro", ", ", "$numero", " - ", "$bairro", ", ", "$municipio", " - ", "$uf", ", ", "$cep",
]

Но, как я видел, это не разрешено в функции find (), но я понятия не имею, как использовать агрегат для этого, потому что агрегатный фреймворк показывает, что он позволяет получить много документов и преобразовать их в один документ, объединяющий все остальные документы, если я ошибаюсь, уточните, пожалуйста.

Спасибо !!!

1 Ответ

0 голосов
/ 08 января 2019

Нет такой разницы между функциями find и aggregate. Агрегация просто используется для изменения формы данных. И есть некоторые операторы, доступные для изменения этих данных в статистической функции.

В поисковом запросе первый параметр предназначен для фильтра, а второй - для проекции и той же роли $match и $project сделать здесь в агрегации

const query = {
  "$and": [
    { "uf": { "$exists": true, "$ne": "" } },
    { "municipio": { "$exists": true, "$ne": "" }},
    {
      "$or": [
        { "email": { "$exists": true, "$ne": "" }},
        { "telefone": { "$exists": true, "$ne": "" }}
      ]
    }
  ]
}

const projection = {
  "atividade_principal": 1,
  "concatinatedField": { "$concat": ["$logradouro", ", ", "$numero", " - ", "$bairro", ", ", "$municipio", " - ", "$uf", ",", "$cep"] },
  "telefone": 1,
  "email": 1,
  "qsa": 1,
  "nome": 1,
  "natureza_juridica": 1,
  "tipo": 1
}

db.empresas.aggregate([
  { "$match": query },
  { "$limit": 1000 },
  { "$project": projection }
])
...