【问题标题】:How to projection/filter embedded keys with applying regex on key如何通过在键上应用正则表达式来投影/过滤嵌入式键
【发布时间】:2015-03-25 07:50:00
【问题描述】:

我想知道如何返回指定的嵌入键?

类似查询

db.collection.find({"table_name": "change_in_real_gdp", {"data.*.actual":1, "data.*. upper_end_of_range"}})

原始文件

{
  "_id": "2012-06-20_change_in_real_gdp",
  "table_name": "change_in_real_gdp",
  "data": {
    "2007": {
      "actual": "4.8",
      "upper_end_of_range": "-",
      "upper_end_of_central_tendency": "-",
      "lower_end_of_central_tendency": "-",
      "lower_end_of_range": "-"
    },
    "2008": {
      "actual": "6.9",
      "upper_end_of_range": "-",
      "upper_end_of_central_tendency": "-",
      "lower_end_of_central_tendency": "-",
      "lower_end_of_range": "-"
    }
    }
}

预期结果

{
  "_id": "2012-06-20_change_in_real_gdp",
  "table_name": "change_in_real_gdp",
  "data": {
    "2007": {
      "actual": "4.8",
      "upper_end_of_range": "-",
    },
    "2008": {
      "actual": "6.9",
      "upper_end_of_range": "-",
    }
    }
}

【问题讨论】:

    标签: mongodb mongodb-query pymongo


    【解决方案1】:

    不能在投影中使用正则表达式。您需要为.find() 方法显式指定projection 参数

    db.collection.find({}, 
        { 
            "data.2007.actual": 1, 
            "data.2007.upper_end_of_range": 1, 
            "data.2008.actual": 1, 
            "data.2008.upper_end_of_range": 1, 
            "table_name": 1 
        }
    )
    

    【讨论】:

      【解决方案2】:

      可以通过查询操作来实现

      所以我附上了一些代码来实现这个

      var projection = '{';
      var start_year = 2007;
      var end_year = 2008;
      
      for(var counter=start_year;counter<=end_year;counter++) {
          var attr1 = "\"data."+counter+".actual\"";
          var attr2 = "\"data."+counter+".upper_end_of_range\"";
          projection += attr1+':1,'+attr2+':1';
          if(counter !== end_year)
          projection += ',';
          else 
          projection += '}';    
      }
      var obj = JSON.parse(projection);
      db.people.find({"table_name": "change_in_real_gdp"},obj);
      

      谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-16
        相关资源
        最近更新 更多