使用$ regex过滤数组元素

时间:2016-09-26 13:38:36

标签: regex mongodb mongodb-query aggregation-framework

     db.collection.aggregate([
        { 
            $match: { 
                "Phone Number": "9585290750", 
                "services": { $regex: "/^t/", $options: "s i" }
            }
        },                     
        {
            $project: {
                "Services": "services" 
            }
        }
    ]);

预期输出:与“服务”字段中的搜索框中的特定字符串匹配的整个数据。

services

我在上面的集合中的正则表达式部分遇到问题,'1 23:59:58'是一个数组字段。请帮我过滤数据。

2 个答案:

答案 0 :(得分:0)

这是因为您将一个JavaScript正则表达式对象的字符串传递给$regex。将正则表达式更改为以下之一。

"service": { "$regex": /^t/, "$options": "si" }

"service": { "$regex": "^t", "$options": "si" }

答案 1 :(得分:0)

伙计们,因为我是Mongodb的新手,我花了一天的时间才找到适当的解决方案。我有一个问题的解决方案。如果你们有比这更好的查询,只需发布​​或修改它....

 db.collections.aggregate([
        {"$match":{"Corporate_ID":"id"}},
        {"$unwind":"$services"},
        {"$match":{"$or":[
            {"services.type":{$regex:'TRXF2016088142',"$options": "i"}},
            {"services.timeSpent":{$regex:'TRXF2016088142',"$options": "i"}},
            {"services.trxID":{$regex:'TRXF2016088142',"$options": "i"}},
            {"services.CustomerQuery":{$regex:'F',"$options": "i"}},
            {"services.ServiceProvided":{$regex:'F',"$options": "i"}},
            {"services.Category":{$regex:'F',"$options": "i"}},
            {"services.callTime":{$regex:'TRXF2016088142',"$options": "i"}},
            {"services.ActualAmount":{$regex:'TRXF2016088142',"$options": "i"}},
            {"services.FinalAmount":{$regex:'TRXF2016088142',"$options": "i"}},
            {"services.DiscountRuppes":{$regex:'TRXF2016088142',"$options": "i"}},
            {"services.DiscountPerctange":{$regex:'TRXF2016088142',"$options": "i"}}                     
            ]}},
        {"$unwind":"$services"},
        {"$project":{
            "service":"$services"}
               }        
])