Oll*_*y B 2 go slice mongodb mgo
我在使用mgo
. 我只是想做{'search_id': {'$in': [1,2,4,7,9]}}
,但我不知道如何在mgo
.
我有一片int
s,并尝试直接传递它:
toRemove := []int{1,2,4,7,9}
err = coll.Remove(bson.M{"search_id": bson.M{"$in": toRemove}})
Run Code Online (Sandbox Code Playgroud)
我看到另一篇文章建议我需要使用[]interface{}
,但这也不起作用:
toRemoveI := make([]interface{}, len(toRemove))
for idx, val := range toRemove {
toRemoveI[idx] = val
}
err = coll.Remove(bson.M{"search_id": bson.M{"$in": toRemoveI}})
Run Code Online (Sandbox Code Playgroud)
我已经浏览了他的文档和其他问题here和gh,但大多数涉及切片的问题似乎都是关于将数据放入切片,而不是我想要实现的目标。
非常感激任何的帮助。
您的原始提案(传递[]int
值)没有缺陷,这样做是有效的。
问题是您使用Collection.Remove()
which 查找并删除与提供的选择器文档匹配的单个文档。因此,您提出的解决方案将完全删除1 个文档,其中一个search_id
包含在您传递的切片中。如果未找到此类文档(并且会话处于安全模式,请参阅Session.SetSafe()
),mgo.ErrNotFound
则返回。
而是使用Collection.RemoveAll()
which 查找并删除与选择器匹配的所有文档:
toRemove := []int{1,2,4,7,9}
info, err := c.RemoveAll(bson.M{"search_id": bson.M{"$in": toRemove}})
if err != nil {
log.Printf("Failed to remove: %v", err)
} else {
log.Printf("Removed %d documents.", info.Removed)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1620 次 |
最近记录: |