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