将新的子文档附加到主结构中的数组
Posted
技术标签:
【中文标题】将新的子文档附加到主结构中的数组【英文标题】:Append new sub document to an array in the main struct 【发布时间】:2018-10-22 16:32:38 【问题描述】:我的 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 := SensorType: "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 must be exactly 12 bytes long (got 0)”
将新传感器实例附加到数据库为传感器生成 id 的传感器数组的最佳方法是什么?
【问题讨论】:
我不认为你可以。文档有 ID,文档中包含的对象由应用程序负责。 【参考方案1】:MongoDB 永远不会为服务器端的子文档生成 ID
。
您真的需要传感器上的ID
吗? MongoDB 不会抱怨没有ID
的子文档(或者它的ID
格式错误),因为子文档可以具有任意结构——因此它可以在没有ID
的情况下轻松存在。
如果您出于某种原因确实需要该 ID,那么您当然可以在客户端创建一个:
sensor.ID := bson.NewObjectId()
【讨论】:
以上是关于将新的子文档附加到主结构中的数组的主要内容,如果未能解决你的问题,请参考以下文章
使用 NodeJS 将新对象附加到 DynamoDB 中的 JSON 数组