返回顶部
首页 > 资讯 > 后端开发 > GO >检查对象数组中的值是否存在 golang
  • 668
分享到

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

2024-02-10 14:02:15 668人浏览 独家记忆
摘要

PHP小编百草在本文将为您介绍如何在golang中检查对象数组中的值是否存在。在开发过程中,我们经常需要对数组进行操作和判断,而在某些情况下,我们需要检查某个值是否存在于一个对象数组中

PHP小编百草在本文将为您介绍如何在golang中检查对象数组中的值是否存在。在开发过程中,我们经常需要对数组进行操作和判断,而在某些情况下,我们需要检查某个值是否存在于一个对象数组中。这个过程可能会涉及到遍历数组、比较值等操作,下面我们将一步步为您介绍如何实现这个功能。

问题内容

我试图在向 monGo 数据库附加新值之前检查该值是否存在,但每次都会收到错误。

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))

我的文档看起来像这样

{
  "statusdata": [
                {
                    "status": "new",
                    "message": "you created a new dispatch request",
                    "createdat": "1657337212751",
                    "updatedat": null
                },
                {
                    "status": "assigned",
                    "message": "justin has been assigned to you",
                    "createdat": "1657412029130",
                    "updatedat": null,
                    "_id": "62ca19bdf7d864001cabfa4a"
                }
            ],
            "createdat": "2022-07-10t00:09:01.785z",

.... }

有不同的状态,我想确保在使用新值更新数据库之前不会多次将相同的状态发送到数据库。

type statustype string

const (
    new              statustype = "new"
    acknowledged     statustype = "acknowledged"
    assigned         statustype = "assigned"
    reject           statustype = "rejected"
    cancel           statustype = "cancelled"
    complete         statustype = "completed"
)

utils.todoc

func todoc(v interface{}) (doc *bson.d, err error) {
    data, err := bson.marshal(v)
    if err != nil {
        return
    }

    err = bson.unmarshal(data, &doc)
    return
}

尝试更新

filter := bson.m{
        "_id":               obid,
        "statusdata.status": bson.m{"$ne": p.status},
    }
    update := bson.m{
        "$push": bson.m{
            "statusdata": newstatustoadd,
        },
        "$set": bson.d{{key: "$set", value: doc}},
    }

    result, err := r.collection.updateone(ctx, filter, update)
    if err != nil {
        // handle error
        return nil, errors.new(err.error())
    }
    if result.matchedcount == 0 {
        // the status already exists in statusdata
    } else if result.modifiedcount == 1 {
        // new status was added successfuly
    }

返回错误


"write exception: write errors: [The dollar ($) prefixed field '$set'
in '$set' is not allowed in the context of an update's replacement
document. Consider using an aggregation pipeline with $replaceWith.]"

解决方法

使用过滤器来排除具有您要添加的状态的文档。如果状态已存在于数组中,则此过滤器将不匹配任何文档。仅当状态尚未添加时才会执行更新操作:

var newStatusToAdd = ... // This is the new statusData document you want to add

filter := bson.M{
    "_id": obId,
    "statusData.status": bson.M{"$ne": p.Status},
}
update := bson.M{
    "$push": bson.M{
        "statusData": newStatusToAdd,
    },
    "$set": doc,
}

result, err := r.collection.UpdateOne(ctx, filter, update)
if err != nil {
    // Handle error
    return
}
if result.MatchedCount == 0 {
    // The status already exists in statusData
} else if result.ModifiedCount == 1 {
    // new status was added successfuly
}

以上就是检查对象数组中的值是否存在 golang的详细内容,更多请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: 检查对象数组中的值是否存在 golang

本文链接: https://lsjlt.com/news/563105.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 检查对象数组中的值是否存在 golang
    php小编百草在本文将为您介绍如何在golang中检查对象数组中的值是否存在。在开发过程中,我们经常需要对数组进行操作和判断,而在某些情况下,我们需要检查某个值是否存在于一个对象数组中...
    99+
    2024-02-10
  • PHP如何检查数组中是否存在某个值
    这篇文章将为大家详细讲解有关PHP如何检查数组中是否存在某个值,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 PHP 中检查数组中是否存在某个值的方法 在 PHP 中,检查数组中是否存在某个值是一个常见...
    99+
    2024-04-02
  • JavaScript中怎么检查对象是否为数组
    JavaScript中怎么检查对象是否为数组,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JS 中的非原始数据类型都是对象(函...
    99+
    2024-04-02
  • Java检查值是否存在于数组中的3种方法
    在 Java 中,有许多方法可以检查此数组中是否存在特定元素。 1)使用线性搜索方法 时间复杂度:O(N) 辅助空间:O(1) for (int element : arr) {     if (elemen...
    99+
    2023-09-17
    java 算法
  • js如何检查属性是否存在对象中
    这篇文章主要介绍js如何检查属性是否存在对象中,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!检查属性是否存在对象中可以使用 in 关键字来检查 JavaScript 对象中是否存在某个属性。const pe...
    99+
    2023-06-27
  • 在 PHP 中检查数组是否包含某值
    PHP 有几种方法可以检查数组是否包含特定值。最方便的方法是使用内置函数 in_array()。in_array() 检查数组是否包含给定值。in_array() 的返回类型是布尔值。in_array() ...
    99+
    2024-02-27
  • PHP怎么检查一个键或值是否存在于数组中
    要检查一个键是否存在于数组中,可以使用array_key_exists()函数。示例代码如下: $array = ['a&...
    99+
    2024-04-02
  • php检查数组是否存在某个键
    在 PHP 开发中,我们经常需要判断一个数组中是否存在某个键。这个需求很常见,比如根据键获取对应的值或者删除特定键值对等。本文将介绍 PHP 中检查数组是否存在某个键的方法。通常情况下,有几种方法可以检查数组是否存在某个键:使用 array...
    99+
    2023-05-23
  • golang 数组 是否存在
    在使用golang进行开发时,我们经常需要遍历数组中的元素来判断数组中是否存在某个特定值。这个问题在实际开发中非常常见,因此,本文将详细介绍如何使用golang数组,判断其中是否存在某个元素。首先,让我们来看看如何创建一个golang数组。...
    99+
    2023-05-15
  • js如何判断对象数组中是否存在某个对象
    目录js判断对象数组中是否存在某个对象js对象数组根据某一属性查找对象总结js判断对象数组中是否存在某个对象 1. 判断数组中是否存在某个元素 直接用数组的indexOf方法就好,存...
    99+
    2023-05-16
    js判断对象数组 js判断是否存在某对象 js判断某个对象
  • php怎么检查数组是否存在元素
    本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑php检查数组是否存在元素的方法检查数组是否存在元素,就是检查数组是否为空数组(如果为空数组则数组中没有元素)。方法1:使用“===”判断数组是否为“[]”如...
    99+
    2024-04-02
  • php检查数组中是否存在某一个字段
    在PHP编程中,开发者常常需要检查一个数组中是否存在某一个指定的字段,以便更好地处理数据。本文章将介绍如何使用PHP中的函数来检查数组中的字段是否存在。一、使用isset函数PHP中的isset()函数可以用来检查一个变量或者数组元素是否已...
    99+
    2023-05-22
  • php怎么检查数组是否有某个键值对
    本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑在PHP中,可以利用array_intersect_assoc()函数来检查数组是否有指定键值对。实现步骤:步骤1:定义一个只包含指定键值对的数组$变量名=[...
    99+
    2024-04-02
  • PHP 检查函数是否存在
    PHP 有一个名为 function_exists() 的内置函数来检查一个函数是否存在,它可以检查任何内置或定义的函数。本教程演示了如何在 PHP 中使用 function_exists()。 使...
    99+
    2024-02-27
  • php数组值是否存在
    在PHP编程中,经常会涉及到对数组的操作,查询数组中是否存在某个值也是常见的需求。PHP提供了多种方法来完成这个操作,本文将逐一介绍这些方法。in_array函数in_array函数是PHP中查询一个值是否存在于数组中的常用函数之一。该函数...
    99+
    2023-05-19
  • php 数组值是否存在
    随着互联网技术的快速发展,Web应用程序已经成为了我们生活中必不可少的一部分。在Web应用程序中,所涉及到的数据处理大多数都是通过数组来完成的。而在实际开发中,我们经常需要判断一个数组中是否存在某个特定的值,这就需要用到PHP中的数组函数。...
    99+
    2023-05-23
  • JavaScript如何检查值是否为数组
    这篇文章主要介绍JavaScript如何检查值是否为数组,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!检查值是否为数组const arr = [1, 2, 3];&n...
    99+
    2023-06-27
  • 如何用JS判断数组中是否存在某个值或者某个对象的值
    目录一、判断是否存在某个值     1、Array.prototype.indexOf()2、Array.prototype.includes()&nb...
    99+
    2023-01-17
    js判断数组存在某个值 js查找数组中是否包含某个对象 js判断一个值是否在一个数组里面
  • 检查MongoDB数据库是否存在?
    检查 MongoDB 数据库是否存在有两种可能性。情况 1:第一种可能性是 MongoDB 数据库存在,即返回特定索引。 情况2:第二种可能是MongoDB数据库不存在,即返回索引-1。注意:索引开始像数组一样从 0 开始,以 (N-1) ...
    99+
    2023-10-22
  • php 数组是否存在键值
    在PHP中,数组是一种非常常见的数据类型,它可以用来存储一系列的值。但是,在实际应用中,我们可能需要判断某个指定的键值是否在一个数组中存在。那么,在PHP中,如何判断一个数组是否存在某个键值呢?判断数组是否存在某个键值的方法有很多种,本文将...
    99+
    2023-05-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作