如果将空白数组传递给 $in 运算符,则会出错
Posted
技术标签:
【中文标题】如果将空白数组传递给 $in 运算符,则会出错【英文标题】:$in operator gives error if pass blank array into it 【发布时间】:2022-01-08 20:44:01 【问题描述】:我参与过 Go 和 MongoDb 项目。其中,我遇到了一个问题。我已经使用 $in 运算符将整数的动态切片 ([]int) 传递到查询中。每件事看起来都不错,但是当这个切片为空时,它会返回一个错误“$in 需要一个数组”。但我将它用作搜索参数,如果我传递空白数组,则它与所有数组匹配。
注意:我使用的是 MongoDB shell 版本 v5.0.3
这是我的代码:
var searchedProfiles []int
searchFilter := bson.M"customer.id": bson.M"$in": searchedProfiles
newQry := []bson.M
"$lookup": bson.M
"localField": "cid",
"from": "customers",
"foreignField": "_id",
"as": "customer",
"$match": searchFilter,
如果有人有任何想法,请告诉我。谢谢!
【问题讨论】:
【参考方案1】:nil
值不会被编组为空数组,因此请确保 searchedProfiles
不是 nil
但至少是一个空切片:
searchedProfiles = []int
这将被编组为一个空数组,因此您不会收到相关错误。
但这不会给你所有文件,这不会给你任何结果(空列表中没有任何内容)。
如果没有搜索到的个人资料,则将其排除在过滤之外。
【讨论】:
我已经编辑了我的问题,但同样的问题存在。如果我已将空 []int 传递给它,则返回错误而不是空结果。 您是否将一个空切片分配给searchedProfiles
?因为问题中的代码不是。此外,如答案中所述,为空数组填充 $in
会给你零个结果,而不是全部。
在我的情况下,如果 searchedProfiles 具有 [1, 2] 等值,那么一切正常,但我们的值 [] 然后它给我类似的错误: "response": "code": 400, "api_status": 0, "message": "Error: #126 - 有问题,请稍后再试。", "data": "Code": 2, "Message": "$in 需要一个数组”,“标签”:null,“名称”:“BadValue”,“包装”:null
是的,我理解您的错误和问题,因为searchedProfiles
是nil
。您必须为其分配一个空的非nil
切片:searchedProfiles = []int
。但同样,这不会给你所有的结果,这不会给你任何结果。
如果您将其声明为var searchedProfiles []int
,那么它将是nil
,这就是我一直在说的。如果为它分配一个切片,它不会是nil
,类似于var searchedProfiles = []int
。以上是关于如果将空白数组传递给 $in 运算符,则会出错的主要内容,如果未能解决你的问题,请参考以下文章
我如何将在 $match 阶段内传递给 $in 运算符的每个 ID 限制为仅 4 个元素