【问题标题】:Remove element from nested array golang mongodb从嵌套数组golang mongodb中删除元素
【发布时间】:2018-01-04 15:42:09
【问题描述】:

我的 mongo 数据库中有这个:

{
"_id" : ObjectId("585a60b45ba19c3eb2016a16"),
"userid" : ObjectId("585a60715ba19c3eb2016a14"),
"apps" : [
    {
        "name" : "Apptest",
        "packagename" : "com.test.ezfez",
        "iconurl" : "an_url",
        "visited" : 0,
        "category" : "category",
        "_id" : ObjectId("585a61405ba19c3eb2016a17")
    },
    {
        "name" : "test",
        "packagename" : "test.packagename",
        "iconurl" : "url",
        "visited" : 0,
        "category" : "",
        "_id" : ObjectId("588755025ba19c6f870282d7")
    }, ...

我想从这个数组中删除一个元素。我正在使用 golang 和 mgo.v2 驱动程序,这是我的代码:

selector := bson.M{"userid": bson.ObjectIdHex("585a60715ba19c3eb2016a14")}
    update := bson.M{"$pull": bson.M{"apps": bson.ObjectIdHex("585a61405ba19c3eb2016a17")}}
    if err := uc.session.DB("API").C("aioapps").Update(selector, update); err != nil {
        fmt.Println(err)
        SendError(w, "Remove", "Error on delete app")
    } else {
        SendSuccess(w, "Remove", "Success")
    }

当我检查 mongodb 时,它会成功,但不会删除该项目。 有人可以告诉我我做错了什么吗? 谢谢

【问题讨论】:

  • 我没有看到588774c85ba19c1e35bdfef9的任何记录,如果我错了,请纠正我
  • 过滤数组元素时,最好使用$elemMatchbson.M{"$elemMatch": bson.M{"apps": '588774c85ba19c1e35bdfef9'}
  • 感谢您的回答。这是一个错误对不起我编辑了

标签: mongodb go


【解决方案1】:

也许您需要在应用程序对象中指定字段名称,就像

更新 := bson.M{"$pull": bson.M{"apps": bson.M{"_id":bson.ObjectIdHex("585a61405ba19c3eb2016a17")}}}

【讨论】:

    猜你喜欢
    • 2019-01-25
    • 1970-01-01
    • 2017-08-19
    • 2022-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2017-05-18
    相关资源
    最近更新 更多