英文:
$in operator gives error if pass blank array into it
问题
我在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},
}
如果有人有任何想法,请告诉我。谢谢!
英文:
I have worked on the Go and MongoDb project. In which, I have faced a problem. I have passed a dynamic slice of integeres ([]int) into a query using $in operator. Every thing seems good but when this slice is empty then it return an error "$in needs an array". But i used it as a search parameter and want if i pass blank array then it matched with all.
Note: I have userd MongoDB shell version v5.0.3
Here is my code:
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},
}
If anybody have any idea please let me know. Thanks!
答案1
得分: 1
nil
值不会被编组为空数组,所以请确保searchedProfiles
不是nil
,而是至少一个空切片:
searchedProfiles = []int{}
这将被编组为一个空数组,因此您将不会收到所提到的错误。
但是这不会给您所有的文档,这将给您零个结果(空列表中没有任何内容)。
如果没有搜索到的配置文件,请从过滤中省略此部分。
英文:
nil
values aren't marshaled as empty arrays, so make sure searchedProfiles
is not nil
but at least an empty slice:
searchedProfiles = []int{}
This will be marshaled into an empty array, so you won't get the error in question.
But this will not give you all documents, this will give you no results (nothing is in the empty list).
If there are no searched profiles, leave this out from the filtering.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论