mongodb中是否有类似节点的语句可用

问题描述 投票:0回答:1

[我想过滤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"
            }

        }
    }   
}
regex mongodb filter aggregate-functions sql-like
1个回答
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/
                              }
                        }             
                    }
               }
          }
    }}
])

Playground

© www.soinside.com 2019 - 2024. All rights reserved.