当前位置: 首页 > 面试题库 >

如何使用mgo将整数切片传递给“ $ in”

薛烨
2023-03-14
问题内容

使用的bson功能创建查询时遇到了一些麻烦mgo。我只是想做{'search_id': {'$in': [1,2,4,7,9]}},但是我不知道怎么做mgo

我有一个ints,并尝试直接传递它:

toRemove := []int{1,2,4,7,9}
err = coll.Remove(bson.M{"search_id": bson.M{"$in": toRemove}})

我看到了另一条建议使用的帖子[]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}})

我在这里和gh上浏览了他的文档和其他问题,但是大多数涉及切片的问题似乎都是关于将数据分成一个切片,而不是我想要达到的目的。

非常感激任何的帮助。


问题答案:

您最初的建议(通过[]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)
}


 类似资料:
  • 问题内容: 例如输入:(类型:) 转换示例:(类型:的切片) 问题答案: 除了mhutter的答案外,还请注意您的输入看起来像一个JSON数组(也许是来自JSON文本?)。 如果您这样处理,则可以将其内容编组为一个切片。直接解析其中的数字并不会更快(因为该包使用了反射),但是它肯定更简单: 输出(在Go Playground上尝试):

  • 问题内容: 背景:使用cgo从Golang调用C函数。 我想使用具有以下签名的C函数:。它会修改的数据和,这就是为什么它使用指针,它们的原因。的值是的长度;是一个字符串数组;返回值只是一个(布尔)指示符,用于指示是否存在错误。 在golang中,我可以使用来成功传递和修改。通过使用。示例代码如下: 如您所见,C函数当前为,但我想要的是。 这就是说:我真正想要的是在C中启用对字符串数组的修改(例如,

  • 问题内容: 我的Mybatis中有一个查询,其中包含一个IN子句,该子句基本上是一组Id(整数) 我现在停留在如何将一个Integer数组传递给此IN子句上,以便它提取正确的记录。尝试通过将一个包含ID的String传递给IN子句,但这无法按预期工作。 下面的代码示例 Mybatis方法使用注释 询问 方法调用 这不起作用,当我调用mapper方法时,Mybatis引发错误 有什么建议吗 问题答案

  • 问题内容: 我正在A中使用RUN指令安装rpm 但是,我想将值“ 2.3”作为参数传递。我的RUN指令应类似于: 哪里 问题答案: 您正在寻找和指导。这些是Docker 1.9中的新功能。查看https://docs.docker.com/engine/reference/builder/#arg。这将允许您添加到,然后使用构建。

  • 问题内容: 如果这个解释不清楚,我很抱歉,我也很难理解。 如何使用PHP和Ajax将数组发送到Javascript? 我正在使用Ajax来获取照片阵列,然后希望将其追加到页面上的空白处。 jQuery如下所示: PHP函数getPhotos如下所示: 如果仅将数据发送到成功回调,但它似乎不是可用的格式。 如果我在PHP中执行,结果将类似于: 我已经尝试过诸如此类的各种组合,但实际上我在猜测并且不确