我想过滤json文件的子数组中的十进制值。在下面的示例代码中,我想应用like函数来获得下面示例文件中的json值,如(t1,t2(。
样本代码:
db.getCollection('temp').find({},{"temp.text./.*t.*/.value":1})
Json文件示例:
{
"_id" :0"),
"temp" : {
"text" : {
"t1" : {
"value" : "960"
},
"t2" : {
"value" : "959"
},
"t3" : {
"value" : "961"
},
"t4" : {
"value" : "962"
},
"t5" : {
"value" : "6.0"
}
}
}
}
MongoDB除了投影之外,没有直接过滤字段名的方法,这只是精确匹配。
但是,使用聚合可以使用$objectToArray,它将把对象{"t1" : {"value" : "960"}}
转换为[{"k":"t1","v":{"value":"960"}}]
。然后,您可以根据k
的值进行筛选,并使用$arrayToObject将左边的条目转换回一个对象。
.aggregate([
{$addFields:{
"temp.text":{
$arrayToObject:{
$filter:{
input:{$objectToArray:"$temp.text"},
cond:{
$regexMatch:{
input:"$$this.k",
regex:/t/
}
}
}
}
}
}}
])
游乐场