Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb mongo go如果[]为空,则认为它为假_Mongodb_Go_Mongo Go - Fatal编程技术网

Mongodb mongo go如果[]为空,则认为它为假

Mongodb mongo go如果[]为空,则认为它为假,mongodb,go,mongo-go,Mongodb,Go,Mongo Go,当前,如果用户拥有subscriptions对象,但该对象为空,即[],则不会将其视为subscriptions=false // hasActiveSubscriptions hasSubscriptions := c.QueryParam("hasSubscriptions") if hasSubscriptions != "" { hasSubscriptions = strings.ToUpper(hasSubscriptions)

当前,如果用户拥有subscriptions对象,但该对象为空,即[],则不会将其视为subscriptions=false

// hasActiveSubscriptions
hasSubscriptions := c.QueryParam("hasSubscriptions")
if hasSubscriptions != "" {

    hasSubscriptions = strings.ToUpper(hasSubscriptions)
    if hasSubscriptions != "TRUE" && hasSubscriptions != "FALSE" {
        fmt.Println("hasSubscriptions query param is an invalid value")
    }
    res, err := strconv.ParseBool(hasSubscriptions)
    if err != nil {
        fmt.Println(err)
    }
            if res {
        pipeline = append(pipeline, bson.M{
            "$match": bson.M{
                "subscriptions": bson.M{"$ne": nil},
            },
        })
    } else {
        pipeline = append(pipeline, bson.M{
            "$match": bson.M{"subscriptions": nil},
        })
    }

}
这就是通话发生的地方。 当前,如果我将任何一个管道查询选项附加到管道,它都不会返回任何对象。我还有其他简单的$match管道查询正在工作

cur, err := collection.Aggregate(ctx, pipeline)
if err != nil {
    return c.String(http.StatusNotFound, "No users found")
}

如果数据库中的
subscriptions
字段是可选的,那么如果要筛选具有订阅的文档,则必须按
subscriptions
存在且其大小大于
0
进行筛选(大于零的条件就足够了,因为只有该字段存在时才可以)。类似地,如果您希望文档没有订阅,则必须按文档不存在或其大小等于
0
进行筛选

一种更简单的方法是测试第一个数组元素的存在性。只有当
订阅存在且其大小大于
0
时,第一个数组元素才能存在,如果第一个元素不存在,则
订阅
不存在或为空

所以简单地使用这个:

pipeline = append(pipeline, bson.M{
    "$match": bson.M{
        "subscriptions.0": bson.M{"$exists": res},
    },
})

如果数据库中的
subscriptions
字段是可选的,那么如果要筛选具有订阅的文档,则必须按
subscriptions
存在且其大小大于
0
进行筛选(大于零的条件就足够了,因为只有该字段存在时才可以)。类似地,如果您希望文档没有订阅,则必须按文档不存在或其大小等于
0
进行筛选

一种更简单的方法是测试第一个数组元素的存在性。只有当
订阅存在且其大小大于
0
时,第一个数组元素才能存在,如果第一个元素不存在,则
订阅
不存在或为空

所以简单地使用这个:

pipeline = append(pipeline, bson.M{
    "$match": bson.M{
        "subscriptions.0": bson.M{"$exists": res},
    },
})

为了检查hasSubscriptions是否为false,我尝试了“$match”:bson.M{“$or”:[]bson.M{“subscriptions”:nil},{“$size”:0}}},但它不起作用,有问题吗?我会使用你的解决方案,但想知道什么是行不通的,谢谢you@John该筛选器将如下所示:
“$match”:bson.M{“$or”:[]接口{}{bson.M{“订阅”:bson.M{“$exists”:false}},bson.M{“订阅”:bson.M{“$size”:0}}}}
检查hasSubscriptions是否为false我尝试了:“$match”:bson.M{“$or”:[]bson.M}{{“subscriptions”:nil},{“$size”:0}}},但它不起作用,有问题吗?我将使用您的解决方案,但想知道什么不起作用,谢谢you@John该筛选器如下所示:
“$match”:bson.M{“$or”:[]接口{}{bson.M{“订阅”:bson.M{“$exists”:false}},bson.M{“订阅”:bson.M{“$size”:0}}