如何检查 MongoDB 中是否存在密钥

2024-03-07

我正在尝试检查 MongoDB 集合中是否存在某个键。基本上,我需要将字符串数组映射到特定的键。如果该键存在,我想通过添加新值来更新列表,否则创建一个具有初始值的新键(如果添加新键,则最初只会添加 1 个值)。

我在网上找到了一些例子,尽管我无法让它在本地工作。下面是我的代码(我使用的是官方 Go MongoDB 驱动程序):

key:= "some_key"
database := client.Database("dbName")
keysCollection := database.Collection("keys")
keysCollection.Find(nil, {key:{$exists:true}});

我遇到了关于这个组件的两个问题{key: {$exists:true}}

  • invalid character U+0024 '$':当尝试检查是否key存在于{$exists:true},尽管 MongoDB 文档似乎支持检查键本身是否存在,而不检查映射到它的确切值
  • syntax error: unexpected {, expecting expression: 在。。。之初{key: {$exists:true}},看起来我无法传递结构?

这是我第一次使用 MongoDB,我对 GoLang 的经验很少,并且被这个看似小问题困扰。

我以正确的方式处理这件事吗?如果是这样,我该如何克服这些问题?


要检查集合中是否存在某个键,请执行以下查询mongo壳和golang分别。假设样本文档的集合为:

{ _id: 1, arr: [ "red", "blue" ] }
{ _id: 2  }

查询:

db.collection.find( { "arr": { "$exists": true } } )

查看用法$exists https://docs.mongodb.com/manual/reference/operator/query/exists/.

var result bson.M
filter := bson.D{{ "arr", bson.D{{ "$exists", true }} }}
err = collection.FindOne(context.TODO(), filter).Decode(&result)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("Found a single document: %+v\n", result)


我正在尝试检查 MongoDB 集合中是否存在某个键。我需要 将字符串数组映射到特定键。如果密钥存在,我 想要通过添加新值来更新列表,否则创建一个新值 具有初始值的密钥(如果添加新密钥,则只会 最初添加 1 值)。

要根据条件更新字段,您需要使用使用聚合管道进行更新 https://docs.mongodb.com/manual/tutorial/update-documents-with-aggregation-pipeline/。以下外壳和golang查询使用条件更新所有文档 - 如果数组字段存在,则会添加来自的值newValue or如果该字段不存在,则创建一个新字段arr的值来自newValue.

var newValue = "white"

db.collection.updateMany(
  { },
  [ { 
       $set: { 
           arr: { 
               $concatArrays: [ 
                   { $ifNull: [ "$arr", [ ] ] }, 
                   [ newValue ] 
               ] 
           } 
       } 
  } ]
)

The golang update:

newValue := "white"
filter := bson.D{{}}

pipe := bson.D{{ "$set", bson.D{{ "arr", bson.D{{ "$concatArrays", bson.A{ bson.D{{"$ifNull",bson.A{ "$arr", bson.A{} }}}, bson.A{ newValue } } }} }} }}
    
updateResult, errr := collection.UpdateMany(ctx, filter, mongo.Pipeline{ pipe })
    
if errr != nil {
    log.Fatal(errr)
}
fmt.Printf("Matched %v documents and updated %v documents.\n", updateResult.MatchedCount, updateResult.ModifiedCount)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查 MongoDB 中是否存在密钥 的相关文章

  • 将 mongo 数组转换为具有键值对的对象

    我有一个包含字符串数组的 mongo 文档 我需要将这个特定的字符串数组转换为包含键值对的对象数组 以下是我目前的做法 id ObjectId 57e3720836e36f63695a2ef2 platform A1 available C
  • Mongoose查询结果是只读的吗?

    如何修改 Mongoose 查询返回的对象 假设我们有以下模式 var S new mongoose Schema name String field String 我对结果进行了以下查询和修改 var retrieve function
  • 所有可能的 GOOS 价值?

    如果我做对了 GOOS在编译源代码时确定 为了更好地支持多个操作系统 我感兴趣的是GOOS可能 当然 Go 是开源的 所以它可能有无限的可能性 所以我真正想要的是一个 通用列表 已知值为 windows linux darwin or fr
  • mongodb 更新所有文档,并将值增加 1 [重复]

    这个问题在这里已经有答案了 我在 mongoDB 中有几个文档 文档结构是这样的 a abc myid 2 我想用 1 更新所有文档的 myid 例如 第一个文档 myid 1 第二个文档 myid 2 依此类推 有询问吗 尝试这个查询 d
  • mongodb 正在运行吗?

    我已经在我的 Unix 服务器上安装了 Mongodb 和 PHP 驱动程序 我的问题是如何判断 Mongodb 是否正在运行 是否有一个简单的命令行查询来检查状态 如果我从外壳程序启动一次 如果我退出外壳程序 它会继续运行 情况似乎并非如
  • 如何在java中创建mongoDB objectid

    参考帖子如何使用 Java 将数组添加到 MongoDB 文档 https stackoverflow com questions 15371839 how to add an array to a mongodb document usi
  • 在 shell/shell 脚本中设置 MongoDB 写关注

    我正在尝试填充一个集合MongoDB的壳 据我了解 使用轻松的Write Concern可以大大加快这个过程 我说的是文档 http docs mongodb org manual core write concern write oper
  • 将 Django +1.10 与 MongoDB 连接

    在过去的几个月里 有人为 MongoDB 更换了 Django 1 10 中的默认数据库引擎吗 我在谷歌上得到的所有信息都是六四年前的 最常见的结果包括mongodb 引擎这需要Django nonrel 来自 Django 1 5 的一个
  • mongo BadValue 未知运算符:$or

    该集合有一份文档 id ObjectId 54b513933aca242d9915a787 carriers carrier ObjectId 54b54d223aca242d9915a788 carryingInterval from I
  • 阻止 Mongoose 为子文档数组项创建 _id 属性

    如果您有子文档数组 Mongoose 会自动为每个子文档创建 id 例子 id mainId subDocArray id unwantedId field value id unwantedId field value 有没有办法告诉 M
  • Go 指针 - 通过指针将值附加到切片

    我有一个 struct ProductData 及其实例 p 它有一个切片属性 type ProductInfo struct TopAttributes map string interface 我想设置 TopAttributes 如下
  • MongoDB insertMany 并跳过重复项

    我试图insertMany https docs mongodb com manual reference method db collection insertMany 项目进入我的 Mongo 数据库 但我想跳过重复的 ID 我在用着N
  • 结构体到磁盘的高效 Go 序列化

    我的任务是将 C 代码替换为 Go 而且我对 Go API 还很陌生 我正在使用 gob 将数百个键 值条目编码到磁盘页面 但 gob 编码有太多不需要的膨胀 package main import bytes encoding gob f
  • 为什么 Mongohint 可以使查询运行速度提高 10 倍?

    如果我使用explain 从shell运行mongo查询 获取所使用的索引的名称 然后再次运行相同的查询 但使用hint 指定要使用的相同索引 解释计划中的 millis 字段是显着下降 例如 没有提供任何提示 gt gt db event
  • 相同的单词但不同的 unicode 字符

    我在 Windows 上使用 Python 构建了一个关于越南餐馆的问答应用程序 要编写越南语字符 我需要使用 Unicode 首先 我从使用 HTML charset utf 8 的 TripAdvisor 网站克隆数据并构建我的 Mon
  • []interface{}{} 中的双大括号是什么意思

    请注意 这是格式为 的双花括号 而不是嵌套花括号 我也不确定这是空接口问题 切片问题还是结构问题 我猜它至少是其中两个的组合 我正在学习 Golang 并且已经达到了空接口 我发现我需要将空接口声明为 interface 或者例如 inte
  • ioutil.ReadFile - 没有这样的文件或目录[重复]

    这个问题在这里已经有答案了 对于以下代码 package main import fmt io ioutil strings func main b err ioutil ReadFile shakespeare txt if err ni
  • MongoDB 查询数组以获取精确的元素匹配,但可能是无序的

    我在 MongoDB 中有一个文档 如下所示 users 2 3 4 我尝试通过匹配用户数组来查询该文档 db things find users all 2 3 4 该查询有效 但也会返回此文档 users 2 3 4 5 最后一个要求是
  • golang 中 *(*int)(nil) = 0 是什么意思?

    我注意到有一行 int nil 0在功能上throw https github com golang go blob master src runtime panic go L1113 go nosplit func throw s str
  • 在 Go 中解析多个 JSON 对象

    可以使用以下方法轻松解析如下对象encoding json包裹 something foo something else bar 我面临的问题是当服务器返回多个字典时 如下所示 something foo something else ba

随机推荐

  • 具有 Enum 类型属性的 WPF 用户控件

    我有一个UserControl called InputSensitiveTextBox继承自TextBox 它有一个我定义的属性CurrentInputType 其类型为MyControlsNamespace SupportedInput
  • 如何:旋转选定/设置的图像 (Flutter)

    从图像选择器 画廊 相机 中选择图像后 我成功地将图像旋转为横向 纵向 这工作正常 并将继续将新图像设置为我想要的方向 但是 我尝试使用相同的方法来旋转已选择 设置的图像 但它不起作用 这是我正在使用的逻辑 import package i
  • SASS/SCSS @import 前面的 ~ 是什么意思/做什么?

    我在 GitHub 上被告知开始使用 在我的 SASS SCSS 之前 import路径 试图用谷歌搜索但找不到正确的答案 我想这太新手了 甚至懒得写 但我想学习它 它指的是node modules目录 或其等效目录 例如 在 Angula
  • 如何获取 Zune 中定义的设备名称?

    在 Zune 中 可以通过 Zune gt 设置 gt 手机 gt 同步选项更改手机名称 例如 我将手机名称更改为 myphone lumia 900 我怎样才能得到这个名字 使用DeviceStatus DeviceName它仅返回型号
  • Python IDLE 无法打开文件,显示“打开文件操作无法连接到打开和保存面板服务”

    刚刚升级到带有 m1 pro 芯片的新 MBP 我在尝试通过 IDLE 打开文件时遇到一些奇怪的问题 它抛出一个错误 说 打开文件操作无法连接到打开和保存面板服务 我尝试重新安装python 当在IDLE的服务设置下查看时 我找不到这样的服
  • 如何重命名 android-debug.apk

    我正在使用 Cordova 5 1 1 和 ionic 框架来创建我的 android 但是 当我尝试构建 apk 时 为什么文件名始终是 android debug apk 有什么办法可以重命名吗 cordova 创建 hello com
  • 如何在每个页面的侧边栏中包含目录树

    我正在 Sphinx 中生成 html 文档 如何修改文档中每个 html 页面的侧边栏 以便它们包含目录树 默认情况下 目录树似乎只显示在master doc页面 并且仅在主区域而不是侧边栏 是否有捷径可寻 我将使用 readthedoc
  • Android studio 3.1 每次重建工程即可看到变化

    将我的 android studio 更新到版本 3 1 后 我遇到了一个问题 当我对代码进行一些更改时 然后启动执行 我会得到旧的代码执行 直到我重建项目或清理它并重试 那是问题吗 PS 这发生在我的旧项目中 我还没有尝试过新项目 我认为
  • scipy 中的修剪树状图(层次聚类)

    我有一个大约有 5000 个条目的距离矩阵 并使用 scipy 的层次聚类方法对矩阵进行聚类 我为此使用的代码是以下片段 Y fastcluster linkage D method centroid D distance matrix Z
  • git,在保留历史记录的同时移动/重命名文件的可靠方法

    我知道有 很多 现有问题看起来很相似 所以让我在问我的问题之前总结一下它们 答案是是否可以在 git 中移动 重命名文件并保留其历史记录 https stackoverflow com questions 2314652 is it pos
  • 使用 css 防止或禁用 div 中的自动图像调整大小(使用 bootstrap)

    我正在尝试显示图像的原始大小 通常它比包含它的 div 的宽度更大 在现代浏览器中 它会自动调整大小以适合父 div 即使当我使用overflow auto图像仍然会调整大小 那么 当外部 div 具有设定宽度时 如何防止图像大小调整呢 谢
  • 使用 MSBuild 和 CruiseControl .NET 构建和部署 VS2010 数据库项目

    我几乎拥有一个 NAnt 脚本来构建和部署 VS2010 数据库项目 但有一个错误阻碍了我 C Program Files x86 MSBuild Microsoft VisualStudio v10 0 TeamData Microsof
  • 一次性计算正弦和余弦

    我有一个科学代码 它使用同一参数的正弦和余弦 我基本上需要该参数的复指数 我想知道是否可以比分别调用正弦和余弦函数更快 而且我只需要大约 0 1 的精度 那么有什么方法可以找到默认的三角函数并截断幂级数以提高速度 我想到的另一件事是 有没有
  • OS X 中的 Bash 脚本绝对路径

    我正在尝试获取 OS X 上当前运行脚本的绝对路径 我看到很多回复都是为了readlink f 0 然而自从 OS X 以来readlink与 BSD 相同 只是不起作用 它适用于 GNU 版本 有没有现成的解决方案来解决这个问题 这三个简
  • Grails 3.1.1 - 当模型类扩展另一个 groovy 类时脏检查不起作用

    我有一个域类 它扩展了另一个具有相同名称但在不同库中的不同包中的常规类 问题是当我修改域类上的实例时 它没有被标记为脏 因此更改不会持久 我读到 grails 3 版本对脏检查有一些增强 这可能是一个错误或者我遗漏了一些东西 新对象可以正确
  • 从networkX中的随机游走中获取节点列表

    我是 networkX 的新手 我创建了一个图表 如下所示 G nx read edgelist filename nodetype int delimiter data weight float 其中边为正 但总和不等于 1 是否有一个内
  • “请检查 gdb 是否经过代码签名 - 请参阅 taskgate(8)” - 如何使用签名的自制软件代码安装 gdb?

    我在 osx 10 8 4 下 并使用自制程序安装了 gdb 7 5 1 动机是获得一个具有新功能的新 gdb 例如 with python 等 长话短说 当我在 c Eclipse 项目中运行调试时 我得到 Error in final
  • 复制 QMimeData 对象的正确方法

    我正在开发一个 Qt 应用程序来存储剪贴板中的所有内容 以便稍后可以恢复它 我的方法是检索QMime数据 http qt project org doc qt 4 8 qmimedata html来自QApplication clipboa
  • Mozilla firefox 不支持预加载

    我在预加载方面遇到问题 我厌倦了使用 html 中的预加载来预加载 css 表 谷歌浏览器支持 但火狐浏览器不支持
  • 如何检查 MongoDB 中是否存在密钥

    我正在尝试检查 MongoDB 集合中是否存在某个键 基本上 我需要将字符串数组映射到特定的键 如果该键存在 我想通过添加新值来更新列表 否则创建一个具有初始值的新键 如果添加新键 则最初只会添加 1 个值 我在网上找到了一些例子 尽管我无