Mongodb 使用结构片更新文档
正在尝试使用官方的mongo驱动程序go.MongoDB.org/mongo-driver/mongo更新MongoDB中的文档 这是我要更新的结构Mongodb 使用结构片更新文档,mongodb,go,Mongodb,Go,正在尝试使用官方的mongo驱动程序go.MongoDB.org/mongo-driver/mongo更新MongoDB中的文档 这是我要更新的结构 type Activity struct { Timestamp time.Time `bson:"timestamp,omitempty"` Type string `bson:"type,omitempty"` } type Member struct {
type Activity struct {
Timestamp time.Time `bson:"timestamp,omitempty"`
Type string `bson:"type,omitempty"`
}
type Member struct {
ID primitive.ObjectID `bson:"_id,omitempty"`
Name string `bson:"name,omitempty"`
Activities []Activity `bson:"activities ,omitempty"`
}
这是更新文档的代码
filter := bson.M{"_id": m.ID}
update := bson.M{
"$set": bson.M{
"name": m.Name,
},
"$each": bson.M{"activities": m.Activities },
}
res, err := coll.UpdateOne(ctx, filter, update)
名称会更新,但活动不会发生任何变化
我做错了什么?我应该改用ReplaceOne吗
名称会更新,但活动不会发生任何变化
这是因为数组更新运算符设计用于(append unique)或(append)
例如,如果要更新阵列而不使用重复的活动,请设置:
update := bson.M{
"$set": bson.M{
"name": obj.Name,
},
"$addToSet": bson.M{"activities": bson.M{"$each": obj.Activities }},
}
cursor, err := collection.UpdateOne(context.Background(), filter, update )
名称会更新,但活动不会发生任何变化
这是因为数组更新运算符设计用于(append unique)或(append)
例如,如果要更新阵列而不使用重复的活动,请设置:
update := bson.M{
"$set": bson.M{
"name": obj.Name,
},
"$addToSet": bson.M{"activities": bson.M{"$each": obj.Activities }},
}
cursor, err := collection.UpdateOne(context.Background(), filter, update )
太好了,谢谢!工作起来很有魅力。如果我总是想更新文档中的所有内容,你会考虑使用ReopOne吗?是的,如果你想重写文档的内容,ReplaceOne就更好了。这将为您节省设置/取消设置操作。太好了,谢谢!工作起来很有魅力。如果我总是想更新文档中的所有内容,你会考虑使用ReopOne吗?是的,如果你想重写文档的内容,ReplaceOne就更好了。这将保存设置/取消设置操作。