ホームページ  >  記事  >  バックエンド開発  >  オブジェクト配列の値が存在するかどうかを確認する

オブジェクト配列の値が存在するかどうかを確認する

WBOY
WBOY転載
2024-02-10 13:30:211079ブラウズ

检查对象数组中的值是否存在 golang

#phpエディタBaicaoは、この記事でgolangでオブジェクト配列の値が存在するかどうかを確認する方法を紹介します。開発の過程では配列を操作したり判定したりすることが多く、場合によってはオブジェクトの配列に特定の値が存在するかどうかを確認する必要があります。このプロセスには、配列の走査、値の比較などが含まれる場合があります。以下では、この関数の実装方法を段階的に紹介します。

質問内容

mongoデータベースに追加する前に新しい値が存在するかどうかを確認しようとしているのですが、毎回エラーが発生します。

リーリー

私のドキュメントは次のようになります

リーリー

.... }

さまざまな状態が存在するため、新しい値でデータベースを更新する前に、同じ状態がデータベースに複数回送信されないようにしたいと考えています。

リーリー

utils.todoc

リーリー

アップデートしてみる

リーリー

エラーを返す

obid, _ := primitive.objectidfromhex(id)
        query := bson.d{{key: "_id", value: obid}}
    
        var result bson.m
        er := r.collection.findone(ctx, bson.m{"_id": obid, "statusdata.status": bson.m{"$in": []string{string(p.status)}}}).decode(&result)
        if er != nil {
            if er == mongo.errnodocuments {
                return nil, errors.new(fmt.sprintf("err na  %v, %v", er.error(), p.status))
            }
            return nil, errors.new(fmt.sprintf("err norr  %v", er.error()))
        }

doc, err := utils.todoc(p)
    if err != nil {
        return nil, errors.new(err.error())
    }

    update := bson.d{{key: "$set", value: doc}}
    res := r.collection.findoneandupdate(ctx, query, update, options.findoneandupdate().setreturndocument(1))

回避策

フィルターを使用して、追加したいステータスを持つドキュメントを除外します。ステータスがすでに配列に存在する場合、このフィルターはどのドキュメントとも一致しません。更新操作は、状態がまだ追加されていない場合にのみ実行されます:

リーリー

以上がオブジェクト配列の値が存在するかどうかを確認するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。