如何通过在键上应用正则表达式来 projection/filter 嵌入键
How to projection/filter embedded keys with applying regex on key
我想知道如何 return 指定的嵌入键?
通过类似的查询
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": "-",
}
}
}
可以使用查询操作来实现
所以我附加了一些代码来实现这个
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);
谢谢
您不能在投影中使用正则表达式。您需要为 .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
}
)
我想知道如何 return 指定的嵌入键?
通过类似的查询
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": "-",
}
}
}
可以使用查询操作来实现
所以我附加了一些代码来实现这个
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);
谢谢
您不能在投影中使用正则表达式。您需要为 .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
}
)