Как получить только ключевые значения в массив, используя mongoldb? - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь использовать получить только значения из результатов запроса Mongodb в массив.

Мой запрос

db.collection_name.find({"actual_time":{"$gt": start_date, "$lte": end_date}}, {'_id': False})

и мой результат

    {
   "result": [
       {
           "start": 7299.69,
           "end": 7299.73,
           "low": 7297.38,
           "open": 7297.84,
           "time": 1536007500,
           "volumefrom": 16.98,
           "volumeto": 123447.27,
       },
       {
           "start": 7307.24,
           "end": 7308.11,
           "low": 7299.69,
           "open": 7299.69,
           "time": 1536007680,
           "volumefrom": 78.7,
           "volumeto": 575049.25,
       }
    ]
}

Но я не хочу этого результата. Я хочу получить результат, как показано ниже

    {
   "result": [
       {
          7299.69,
          7299.73,
          7297.38,
          7297.84,
          1536007500,
          16.98,
          123447.27,
       },
       {
          7307.24,
          7308.11,
          7299.69,
          7299.69,
          1536007680,
          78.7,
          575049.25,
       }
    ]
}

Как написать запрос в Mongodb?

1 Ответ

0 голосов
/ 05 сентября 2018

Вы можете использовать ниже агрегации в 3.4.

Используйте $let с $objectToArray на $$ROOT для извлечения значений ключа.

db.collection_name.aggregate([
  {"$match":{"actual_time":{"$gt":start_date,"$lte":end_date}}},
  {"$project":{
    "_id":0,
    "keyvalues":{
      "$let":{
        "vars":{"dockv":{
         "$filter":{
          "input":{"$objectToArray":"$$ROOT"},
          "cond":{"$not":{"$in":["$$this.k",["_id"]]}}
          }
         }},
        "in":"$$dockv.v"
      }
    }
  }},
 {"$group":{"_id":null,"results":{"$push":"$keyvalues"}}}
])
...