我试图做这样的更新查询:
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/