Golang Mongodb $push 如果不存在则创建

Golang Mongodb $push and if doesn't exist create

所以基本上我有一个必须出现在 mongoDb 中的结构,我必须编写一个查询 将首先检查具有 profileID 的对象是否已经存在,它将推送一个新的报价id 到现有对象提供数组。如果不存在具有 profileID 的对象,它将创建一个并将报价 ID 添加到报价数组。是否可以在一个查询中完成?如果可以,有人可以帮助我实现它吗?

type IgnoreOffer struct {
    ProfileID primitive.ObjectID   `json:"profileID" bson:"profileID"`
    Offers    []primitive.ObjectID `json:"offers,omitempty" bson:"offers,omitempty"`
}

这是我的代码,但它不会在数据库中创建新对象。

func getIgnoreOffersCollection() *mongo.Collection {
    return db.GetMongoCollection("ignoreOffers")
}

func ignoreOffer(profileId primitive.ObjectID, offerId primitive.ObjectID) error {
    var offer IgnoreOffer
    offer.ProfileID = profileId
    ctx, _ := db.GetTimeoutContext()
    filter := bson.M{"profileID": profileId}
    update := bson.M{
        "$set": bson.M{
            "updatedAt": time.Now(),
        },
        "$push": bson.M{
            "offers": offerId,
        },
    }

    _, err := getIgnoreOffersCollection().UpdateOne(ctx, filter, update)
    if err != nil {
        log.Error("could not update ignoreOffer collection, err: ", err)
        return err
    }
    return nil
}

您的情况需要更新插入:

_, err := getIgnoreOffersCollection().UpdateOne(ctx, filter, update, options.Update().SetUpsert(true))