mongo go if [] is empty 认为它是 false
mongo go if [] is empty deem it as false
目前,如果用户有一个订阅对象,但它是空的,即 [],那么它不会被视为 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},
})
}
}
这是通话发生的地方。
目前,如果我将任一管道查询选项附加到管道,它 returns 没有对象。我还有其他简单的 $match 管道查询在工作。
cur, err := collection.Aggregate(ctx, pipeline)
if err != nil {
return c.String(http.StatusNotFound, "No users found")
}
如果 subscriptions
字段在数据库中是可选的,那么如果你想过滤带有订阅的文档,你必须通过 subscriptions
存在并且它的大小大于 0
来过滤(大于零条件就足够了,因为这只能在字段存在的情况下)。同样,如果您想要没有订阅的文档,则必须按 non-existent 或其大小等于 0
.
进行过滤
一个更简单的方法是测试第一个数组元素是否存在。仅当 subscriptions
存在且其大小大于 0
时,第一个数组元素才能存在,如果第一个元素不存在,则 subscriptions
要么不存在,要么为空。
所以简单地使用这个:
pipeline = append(pipeline, bson.M{
"$match": bson.M{
"subscriptions.0": bson.M{"$exists": res},
},
})
目前,如果用户有一个订阅对象,但它是空的,即 [],那么它不会被视为 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},
})
}
}
这是通话发生的地方。 目前,如果我将任一管道查询选项附加到管道,它 returns 没有对象。我还有其他简单的 $match 管道查询在工作。
cur, err := collection.Aggregate(ctx, pipeline)
if err != nil {
return c.String(http.StatusNotFound, "No users found")
}
如果 subscriptions
字段在数据库中是可选的,那么如果你想过滤带有订阅的文档,你必须通过 subscriptions
存在并且它的大小大于 0
来过滤(大于零条件就足够了,因为这只能在字段存在的情况下)。同样,如果您想要没有订阅的文档,则必须按 non-existent 或其大小等于 0
.
一个更简单的方法是测试第一个数组元素是否存在。仅当 subscriptions
存在且其大小大于 0
时,第一个数组元素才能存在,如果第一个元素不存在,则 subscriptions
要么不存在,要么为空。
所以简单地使用这个:
pipeline = append(pipeline, bson.M{
"$match": bson.M{
"subscriptions.0": bson.M{"$exists": res},
},
})