Go 更新某些用户字段

Go 更新某些用户字段,go,mgo,Go,Mgo,对my API的请求包含ID(必填)和可选的其他字段,如名称、电子邮件和用户名 { "id" : "12345", "name" : "Bob", "email" : "test@example.com" } 将请求绑定到structuser后,如果我的数据库中没有ID为的用户,我会使用以下方法将其添加到数据库中: user.App_id = appId user.Created_at = (*tools.Timestamp)(&now) user.Update

对my API的请求包含ID(必填)和可选的其他字段,如名称、电子邮件和用户名

{
    "id" : "12345",
    "name" : "Bob",
    "email" : "test@example.com"
}
将请求绑定到struct
user
后,如果我的数据库中没有ID为的用户,我会使用以下方法将其添加到数据库中:

user.App_id = appId
user.Created_at = (*tools.Timestamp)(&now)
user.Updated_at = (*tools.Timestamp)(&now)
_ = C.Database.C("users").Insert(&user);
但是如果有用户,我只想更新请求对象包含的字段,但我不确定如何编写查询

我的
user
struct使用指针,以便检查
nil

type user struct {
    Id      *string    `bson:"id" json:"id"`
    Name    *string    `bson:"name" json:"name"`
    ...
}
我在应用程序的其他地方使用的更新查询如下所示:

err := collection("users").Update(bson.M{"id" : "user.Id"},bson.M{"$set": bson.M{"???":"???"}})
但我不确定在这种情况下如何构造查询的后一部分


注意:我没有使用MongoDB的_id

我相信您只需使用

err := collection("users").Update(bson.M{"id" : user.Id},bson.M{"$set": &user})

为您的db包包括导入如何?问这个问题很有必要。导入是什么意思?您的文件顶部可能有
import“gopkg.in/mgo.v2”
,但我怎么知道呢?也许你用的是
虚构的Mongodriver
。当我猜测你在呼叫哪个库时,很难给出一个像样的答案。我希望底部的mgo标签可能会有所帮助?我没有意识到该标签是专为Go mgo司机设计的。。。我仍然认为在你的问题中加入这一点是明智的。在代码片段前面加上相关的导入非常简单。