如何使用Mongoldb仅将键值放入数组中?

时间:2018-09-05 13:22:42

标签: arrays mongodb mongodb-query aggregation-framework

我试图只使用从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 :(得分:1)

您可以在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"}}}
])