【问题标题】:how to select all values of particular key from an array of objects如何从对象数组中选择特定键的所有值
【发布时间】:2020-02-26 05:00:19
【问题描述】:

以下是 MongoDB 中名为“auto_sales”的集合,我想从对象数组的数据中选择“sales”的所有值。

Collection-
{
"name" : "auto_sales", 
"data" : [ 
{ "sales" : 10, 
  "temp" : 50 }, 

{ "sales" : 9, 
"temp" : 51 }, 

{"sales" : 8, 
"temp" : 55 }, 

{"sales" : 57, 
"temp" : 7 }, 

{"sales" : 58, 
"temp" : 8 } 
] }

是否有任何查询可以从“数据”中获取“销售”的所有值。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    你是说这个吗:

    db.collection.find(
       {},
       { "data.sales": 1 }
    )
    

    给了

    { 
        "_id" : ObjectId("5e55400d22139e9b31aa786e"), 
        "data" : [
            {
                "sales" : 10.0
            }, 
            {
                "sales" : 9.0
            }, 
            {
                "sales" : 8.0
            }, 
            {
                "sales" : 57.0
            }, 
            {
                "sales" : 58.0
            }
        ]
    }
    

    或者更确切地说是这个:

    db.collection.aggregate([
       {
          $project: {
             sales: {
                $reduce: {
                   input: "$data",
                   initialValue: [],
                   in: { $concatArrays: ["$$value", ["$$this.sales"]] }
                }
             }
          }
       }
    ])
    

    db.collection.aggregate([
      {
        $project: {
          sales: {
            $map: {
              input: "$data",
              in: "$$this.sales"
            }
          }
        }
      }
    ])
    

    给予

    { 
        "_id" : ObjectId("5e55400d22139e9b31aa786e"), 
        "sales" : [
            10.0, 
            9.0, 
            8.0, 
            57.0, 
            58.0
        ]
    }
    

    【讨论】:

    • 干得好!您可以在此链接中尝试第二个查询:mongoplayground.net/p/BlCF0jN6vuV
    • 如果您不介意,您可以发布此答案的 map-reduce 版本吗?
    • @bravemaster 实际上我从未使用过 map-reduce - 所以这对我来说是一个挑战。
    猜你喜欢
    • 2022-08-03
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    相关资源
    最近更新 更多