Как получить значения в mongdb - PullRequest
0 голосов
/ 16 января 2020

Это мои мои данные в Mongodb

{
    "d" :  {
        "results" :  [
            {
                "slack_id" :  "RAGHU@TN.COM",
                "connector_id" :  "GRECLNT900",
                "sys_role" :  "DEV",
                "user_id" :  "RAGHU"     
            },
            {
                "slack_id" :  "RAGHU@TN.COM",
                "connector_id" :  "GRECLNT900",
                "sys_role" :  "PRD",
                "user_id" :  "RAGHU",
               "question" : "What is your favorite color?",
               "Answer" : "Orange"      
            },         
         ]  
     }
}

Если я даю RAGHU@TN.COM., тогда я хочу отобразить sys_role. Вывод как это [DEV, PRD]

Я пытаюсь таким образом

x = mydb.mycollection.distinct("sys-role")

Но я получаю пустой массив, как [ ]

Ответы [ 4 ]

1 голос
/ 20 января 2020

Вы должны обработать курсор как ссылку (лично я вижу его как ссылку в C), а затем отмените ссылку, чтобы увидеть результат. (Что находится внутри адреса) Для уточнения c столбец, вот результат из командной строки:

my_cursor = mydb.mycollection.distinct("sys-role")
for x in my_cursor:
    print('{0}'.format(x['sys_role']))
0 голосов
/ 16 января 2020

Используя Mon go запрос агрегации, вы получите требуемый набор результатов. Попробуйте это:

db.collection.aggregate([
  {
    "$match": {
      "d.results.slack_id": "RAGHU@TN.COM"
    }
  },
  {
    $group: {
      _id: "$d.results.slack_id",
      sys_role: {
        $push: "$d.results.sys_role"
      }
    }
  }
])
0 голосов
/ 16 января 2020
db.getCollection("collection").aggregate(

    // Pipeline
    [
        // Stage 1
        {
            $project: {
                 results: {
                        $filter: {
                           input: "$d.results",
                           as: "item",
                           cond: { $eq: [ "$$item.slack_id", 'RAGHU@TN.COM' ] }
                        }
                     }
            }
        },

        // Stage 2
        {
            $unwind: {
                path : "$results",
                preserveNullAndEmptyArrays : false // optional
            }
        },

        // Stage 3
        {
            $group: {
            _id:'$results.slack_id',
            sys_roles:{$addToSet:'$results.sys_role'}
            }
        },

    ]



);
0 голосов
/ 16 января 2020

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

[
  {
    '$match': {
      'slack_id': 'RAGHU@TN.COM'
    }
  }, {
    '$group': {
      '_id': 'slack_id', 
      'result': {
        '$addToSet': 'sys_role'
      }
    }
  }
]

С этим конвейером ваш набор sys_role будет в поле .result.

...