将新的子文档附加到主结构中的数组
Append new sub document to an array in the main struct
我的 MongoDB 数据库中有以下 go 结构:
type Station struct {
ID bson.ObjectId `bson:"_id" json:"id"`
Name string `bson:"name" json:"name"`
Sensors []Sensor `bson:"sensors" json:"sensors"`
}
type Sensor struct {
ID bson.ObjectId `bson:"_id" json:"id"`
Type string ` bson:"type" json:"type"`
Value float64 `bson:"value" json:"value"`
}
当我在端点 localhost:3000/stations/<IDofTheStation/sensors
发出 POST 请求时,它应该向指定站添加一个新传感器。
目前我有这个代码
func AddSensorToStation(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
params := mux.Vars(r)
station, err := dao.FindById(params["id"])
if err != nil {
respondWithError(w, http.StatusBadRequest, "Invalid Station ID")
return
}
sensor := Sensor{Type: "test"}
station.Sensors = append(station.Sensors, sensor)
if err := dao.Update(station); err != nil {
respondWithError(w, http.StatusInternalServerError, err.Error())
return
}
respondWithJson(w, http.StatusOK, station)
}
问题是它不会为我要添加的新传感器自动生成 ID,因此会抛出错误“ObjectIDs 必须恰好 12 个字节长(得到 0)"
将新的传感器实例附加到数据库生成传感器 ID 的传感器数组的最佳方法是什么?
MongoDB 永远不会在服务器端为子文档生成 ID
。
你真的需要传感器上的 ID
吗? MongoDB 不会抱怨子文档没有 ID
(或其 ID
格式错误),因为子文档可以具有任意结构 - 因此它很容易存在没有 ID
.
如果您出于某种原因确实需要 ID,那么您当然可以在客户端创建一个:
sensor.ID := bson.NewObjectId()
我的 MongoDB 数据库中有以下 go 结构:
type Station struct {
ID bson.ObjectId `bson:"_id" json:"id"`
Name string `bson:"name" json:"name"`
Sensors []Sensor `bson:"sensors" json:"sensors"`
}
type Sensor struct {
ID bson.ObjectId `bson:"_id" json:"id"`
Type string ` bson:"type" json:"type"`
Value float64 `bson:"value" json:"value"`
}
当我在端点 localhost:3000/stations/<IDofTheStation/sensors
发出 POST 请求时,它应该向指定站添加一个新传感器。
目前我有这个代码
func AddSensorToStation(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
params := mux.Vars(r)
station, err := dao.FindById(params["id"])
if err != nil {
respondWithError(w, http.StatusBadRequest, "Invalid Station ID")
return
}
sensor := Sensor{Type: "test"}
station.Sensors = append(station.Sensors, sensor)
if err := dao.Update(station); err != nil {
respondWithError(w, http.StatusInternalServerError, err.Error())
return
}
respondWithJson(w, http.StatusOK, station)
}
问题是它不会为我要添加的新传感器自动生成 ID,因此会抛出错误“ObjectIDs 必须恰好 12 个字节长(得到 0)"
将新的传感器实例附加到数据库生成传感器 ID 的传感器数组的最佳方法是什么?
MongoDB 永远不会在服务器端为子文档生成 ID
。
你真的需要传感器上的 ID
吗? MongoDB 不会抱怨子文档没有 ID
(或其 ID
格式错误),因为子文档可以具有任意结构 - 因此它很容易存在没有 ID
.
如果您出于某种原因确实需要 ID,那么您当然可以在客户端创建一个:
sensor.ID := bson.NewObjectId()