简体   繁体   English

$ 或 $ 内 $ 和 $ 过滤条件不工作

[英]$or inside $and in $filter condition not working

I am using golang with mongodb,mgo collection我正在使用 golang 和 mongodb,mgo 集合

My mongodb collection is我的 mongodb 集合是

 **department**
    {
     dept_id:1,
     dept_name:'CSE',
     dept_overview:'overview'
    }
   ................

**employee**
    {
    emp_id:1,
    emp_name:'abc',
    qualification:'PHD',
    emp_dept:'CSE',
    city:'xyz'
    }
    {
    emp_id:2,
    emp_name:'xyz',
    qualification:'PHD',
    emp_dept:'CSE',
    city:'xyz',
    status:1
    }
    ..........

Below is my Go code using pipeline下面是我使用管道的 Go 代码

    var conditionParam []bson.M
    if(city!=""){
        conditionParam = []bson.M{
        bson.M{"$eq": []string{"$$element.qualification", "PHD"}},
            bson.M{"$eq": []string{"$$element.emp_dept", "CSE"}},
                bson.M{"$eq": []string{"$$element.city", "xyz"}},
                bson.M{"$or": []bson.M{
            bson.M{"$$element.status": bson.M{"$exists": false}},
            bson.M{"$$element.status": 1}}, 
                },
            }
    }else if(){
    --------------------
}

matchStage:=bson.M{"$match":bson.M{'dept_id':1}}
lookupStage:=bson.M{"$lookup": bson.M{
    "from":         "employee",
    "localField":   "dept_name",
    "foreignField": "emp_dept",
    "as":           "result_list",
}}
    pipeline := getCollection.Pipe([]bson.M{
            matchStage,
            lookupStage,
            {"$addFields": bson.M{
                "result_list": bson.M{
                    "$filter": bson.M{
                        "input": "$result_list",
                        "as":    "element",
                        "cond": bson.M{
                            "$and": conditionParam,
                        },
                    },
                },
            }},
        })

This code return error此代码返回错误

Unrecognized expression '$$element.status'

How We can use $or inside $and in golang using mgo collection?我们如何使用 mgo 集合在 golang 中使用$or$and内部?

when I put comment on or statement it returns the result but when I used the or it gives error.Can anyone suggest me how to use $or inside $and in pipeline当我对or声明发表评论时它返回结果但是当我使用or它给出错误。谁能建议我如何使用 $or inside $and in pipeline

 var conditionParam []bson.M
        if city == "" {
            conditionParam = []bson.M{
                bson.M{"$eq": []string{"$$element.qualification", "PHD"}},
                bson.M{"$eq": []string{"$$element.emp_dept", "CSE"}},
                bson.M{"$eq": []string{"$$element.city", "xyz"}},
                bson.M{"$or": []interface{}{"$exists", []interface{}{"$$element.status", false}}},
                bson.M{"$or": []interface{}{"$$element.status", 1}}, 
            }
    } 

I tried this code to write conditionParam and It worked for me.我试过这段代码来编写 conditionParam 并且它对我有用。 I did not check all the cases yet but I want to know yours suggesstion, Is it right way to write the or operator to check field exists and if exists check its value.我还没有检查所有情况,但我想知道您的建议,编写or运算符来检查字段是否存在是否正确,如果存在则检查其值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM