[我想过滤json文件子数组中的十进制值。在下面的示例代码中,我想应用like函数来获取下面示例文件中的json值like(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/
}
}
}
}
}
}}
])