Как получить уникальные значения каждого столбца в наборе запросов Mongodb, используя nodejs - PullRequest
0 голосов
/ 10 октября 2018

Я использую nodejs для получения данных из коллекции mongodb.
Я получил все данные из коллекции, но хотел бы получить результат, как в Ожидаемый результат .
Я получил результат, как в данных.Я должен получить результат фильтров, которые я упомянул ниже вместе с ним.Пожалуйста, помогите мне сделать это

 db.collection('collection_name').find({}).toArray(function(err, items) 
  {
     if(err){
        console.log(err)
        return res.send(500,'something went wrong')
     }
     else{
        res.send({"ISM": items})
     }
  })

Результат, который я получил, как показано ниже:

 {"data": [{
             "CARD_VENDOR": "123",
             "TRANSACTION_AMOUNT": "44938.72",
           },
           {
             "CARD_VENDOR": "012",
             "TRANSACTION_AMOUNT": "1000.00",
           },
           {
             "CARD_VENDOR": "234",
             "TRANSACTION_AMOUNT": "44938.72",
          }]
  }

Ожидаемый результат:

   {"data": [{
             "CARD_VENDOR": "123",
             "TRANSACTION_AMOUNT": "44938.72",
           },
           {
             "CARD_VENDOR": "012",
             "TRANSACTION_AMOUNT": "1000.00",
           },
           {
             "CARD_VENDOR": "234",
             "TRANSACTION_AMOUNT": "44938.72",
          }]
  },
  "filters":{
               "CARD_VENDOR" : ["123","012","234"],
               "TRANSACTION_AMOUNT": [44938.72,1000.00]
            }

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Чтобы получить желаемый результат, вам нужно запустить агрегатную операцию для коллекции, которая использует конвейер $facet, который позволяет обрабатывать несколько конвейеров агрегации в одной стадии.на том же наборе входных документов.Каждый подчиненный конвейер имеет свое поле в выходном документе, где его результаты хранятся в виде массива документов.

В этом случае ваш агрегатный конвейер будет выглядеть следующим образом:

const pipeline = [
    { '$facet': {
        'data': [
            { '$match': {} }
        ],
        'filters': [
            { '$group': {
                '_id': null,
                'CARD_VENDOR': { '$push': '$CARD_VENDOR' },
                'TRANSACTION_AMOUNT': { '$push': '$TRANSACTION_AMOUNT' }
            } },
            { '$project': {
                '_id': 0
            } }
        ]
    } },
    { '$addFields': {
        'filters': { '$arrayElemAt': ['$filters', 0 ] }
    } }
]

db.collection('collection_name').aggregate(pipeline, (err, results) => {
    if (err){
        console.log(err)
        return res.send(500, 'something went wrong')
    } else { 
        console.log(results)
        res.send({ "ISM": results })
    }
})
0 голосов
/ 10 октября 2018

вы должны манипулировать вашим массивом

data: {
"data": [{
             "CARD_VENDOR": "123",
             "TRANSACTION_AMOUNT": "44938.72",
           },
           {
             "CARD_VENDOR": "012",
             "TRANSACTION_AMOUNT": "1000.00",
           },
           {
             "CARD_VENDOR": "234",
             "TRANSACTION_AMOUNT": "44938.72",
          }],
  "filters":{
               "CARD_VENDOR" : ["123","012","234"],
               "TRANSACTION_AMOUNT": [44938.72,1000.00]
            }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...