Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 使用结构片更新文档_Mongodb_Go - Fatal编程技术网

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 {

正在尝试使用官方的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 {
    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就更好了。这将保存设置/取消设置操作。