您最初的建议(通过
[]int值)没有缺陷,这样做是有效的。
问题是您使用
Collection.Remove()它来查找和删除与提供的选择器文档匹配的
单个 文档。因此,您提出的解决方案将 精确 删除 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)}


