代码之家  ›  专栏  ›  技术社区  ›  Naguib Ihab

如何与mgo一起使用$in[副本]

  •  0
  • Naguib Ihab  · 技术社区  · 7 年前

    我在使用的bson功能创建查询时遇到了一些问题 mgo {'search_id': {'$in': [1,2,4,7,9]}} 氧化镁 .

    我有一片面包 int s、 并尝试直接传递:

    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上浏览了he文档和其他问题,但大多数涉及切片的问题似乎都是关于将数据放入切片,而不是我试图实现的目标。

    任何帮助都将不胜感激。

    0 回复  |  直到 9 年前
        1
  •  5
  •   icza    9 年前

    你最初的提议(通过一项 []int

    问题是你用的是 Collection.Remove() 仅有一个的 正好是一份文件 ,一个 search_id Session.SetSafe() ), mgo.ErrNotFound 他回来了。

    Collection.RemoveAll() 查找并删除 全部的 与选择器匹配的文档:

    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)
    }