Я новичок в mongodb и golang. В одном из моих проектов я хочу подключить монго с помощью go. Я использую драйвер mgo.v2 для подключения монго с go. Мой вопрос: Как я могу автоматически увеличивать поле _id моего документа, чтобы всякий раз, когда я пытаюсь выполнить операцию POST, он должен автоматически увеличивать поле _id документа? Я хочу реализовать что-то похожее на функцию «FindAndModify», но я не вижу эту функцию в go. Это то, что я хочу попробовать. Auto increment id in mongodbКак автоматически увеличивать поле id mongodb с помощью golang mgo driver?
type count struct {
ID string `bson:"_id"`
Seq int `bson:"seq"`
}
var doc count
func get NextSequence(name string) int{
change := mgo.Change{
Update: collection.Update(count{ID: "userid"}, bson.M{"$inc": count{Seq: 1}}),
ReturnNew: true,
}
_, err1 := collection.Find(bson.M{}).Apply(change, &doc)
return doc.Seq
}
func main(){
fmt.Println(getNextSequence("userid"))
fmt.Println(getNextSequence("userid"))
doc2 := msg{ID: getNextSequence("userid"), Name: "Sarah"}
doc3 := msg{ID: getNextSequence("userid"), Name: "Sarah2"}
}
Я попробовал код выше, но значение НомерСтарта, кажется, не дает мне increment.It 0 каждый раз я сделать вызов функции. Спасибо за помощь.
автоинкрементные в MongoDB, как правило, плохая практика, потому что это не очень хорошо масштабируется. Это отчасти поражает цель его использования. Существует причина, по которой значение по умолчанию не является значением с автоматическим повышением первичного ключа. Есть ли что-то, что вы имеете в виду, чего хотите достичь, это может быть сделано только путем автоматического увеличения значений идентификаторов? –
Я больше не мог согласиться с @WillC. Кроме того: '_id' является неизменным. Когда вы «изменяете» его, вы фактически создаете новый документ. В случае, когда вам действительно нужен счетчик (например, для оптимистической блокировки), вы должны использовать оператор '$ inc' в поле, которое не является *' _id'. –