mongodb - 如何构建bson.D {}

标签 mongodb go bson

我试图做这样的更新查询:

    coll = client.Database("tedi").Collection("users")

    filter := bson.D{primitive.E{Key: "_id", Value: userID}}
    update := bson.D{primitive.E{Key: "$addToSet", Value: bson.D{primitive.E{Key: "listings", Value: listingID}}}}
    
    ur, err := coll.UpdateOne(context.TODO(), filter, update)
    if err != nil {
        return "", err
    }

    fmt.Println(ur.MatchedCount)
    fmt.Println(ur.UpsertedCount)
    fmt.Println(ur.ModifiedCount)
    fmt.Println(ur.UpsertedID)

我没有返回任何错误,但是没有任何更新发生,因此我认为update选项的结构不正确。
如果我这样构建:bson.D{{"$addToSet", bson.D{{"listings", listingID}}}},如此处文档所建议:https://godoc.org/go.mongodb.org/mongo-driver/mongo#Collection.UpdateOne,IDE会警告我:go.mongodb.org/mongo-driver/bson/primitive.E composite literal uses unkeyed fields所有ur.*Count变量均为0,而ur.UpsertedID为nil
我正在使用go1.15 Linux / amd64
和go.mongodb.org/mongo-driver v1.4.0

最佳答案

好的,所以我找到了问题。
我必须传递primitive.ObjectID而不是string
我这样做是这样的:

    oid, err := primitive.ObjectIDFromHex(userID)
    if err != nil {
        return err
    }

    filter := bson.D{primitive.E{Key: "_id", Value: oid}}
其余的都一样

关于mongodb - 如何构建bson.D {},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63646165/

相关文章:

javascript - 如何查询某个字段值最高的文档

go - 尝试使用 close(ch) 结束 goroutine 但最终会无限运行

javascript - 导入 BSON 文档、MongoDB 时出错

java - jackson 将 map 序列化到列表

java - 审核 (@CreatedDate) 不适用于具有反应式 MongoDB 的 WebFlux Spring Boot

MongoDB, Mongoose : How to find subdocument in found document?

mongodb - 使用 $in 排序不返回所有文档

go - 当你有一个分片的 MySQL 数据库解决方案时,你如何使用 go-sql-driver?

go - GC 收集时释放 C 指针

C# BsonDocument 删除元素