如何增加 MongoDB 中的现有值

2023-11-21

我在用MongoDB 的 Stitch 平台。我想存储一个value and a count与数据库中的该值相关联。现在value可能不是第一次出现,所以我想插入value with count = 1。 我可以用update()使用以下命令更新 count 的现有值$inc或者我可以使用upsert()将值添加到数据库中。 现在,问题是,我有一个map我的值和计数,我想一次插入(更新/更新插入)。我不想给网络带来负担。 我正在使用insertMany()插入map立即但它显然不会更新该值。

那么可以这样做吗?

附:我正在使用 javascript 来实现同样的目的。


根据 MongoDb 3.6:

db.collection.update(query, update, options)

修改现有文档或文档在一个集合中。该方法可以修改现有文档的特定字段或完全替换现有文档,具体取决于更新参数。

意思是您可以使用 update 更新插入多个文档。

首先,您应该从仅包含值的映射创建数组。

const arrayOfValues = ['value_01', 'values_02'];

那么你应该在更新方法上使用 upsert + multi 选项:

db.foo.update({value: { $in: arrayOfValues}}, {$inc: {count:1}}, { upsert: true, multi: true });

测试输出:

> db.createCollection("test");
{ "ok" : 1 }
> db.test.insertMany([{value: "a"}, {value: "b"}, {value: "c"}];
... );
2017-12-31T12:12:18.040+0200 E QUERY    [thread1] SyntaxError: missing ) after argument list @(shell):1:61
> db.test.insertMany([{value: "a"}, {value: "b"}, {value: "c"}]);
{
    "acknowledged" : true,
    "insertedIds" : [
        ObjectId("5a48b8061b98cc5ac252e435"),
        ObjectId("5a48b8061b98cc5ac252e436"),
        ObjectId("5a48b8061b98cc5ac252e437")
    ]
}
> db.test.find();
{ "_id" : ObjectId("5a48b8061b98cc5ac252e435"), "value" : "a" }
{ "_id" : ObjectId("5a48b8061b98cc5ac252e436"), "value" : "b" }
{ "_id" : ObjectId("5a48b8061b98cc5ac252e437"), "value" : "c" }
> db.test.update({value: { $in: ["a", "b", "c"]}}, {$inc: {count:1}}, { upsert: true, multi: true });
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
> db.test.find();
{ "_id" : ObjectId("5a48b8061b98cc5ac252e435"), "value" : "a", "count" : 1 }
{ "_id" : ObjectId("5a48b8061b98cc5ac252e436"), "value" : "b", "count" : 1 }
{ "_id" : ObjectId("5a48b8061b98cc5ac252e437"), "value" : "c", "count" : 1 }
> db.test.update({value: { $in: ["a", "b", "c"]}}, {$inc: {count:1}}, { upsert: true, multi: true });
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
> db.test.find();
{ "_id" : ObjectId("5a48b8061b98cc5ac252e435"), "value" : "a", "count" : 2 }
{ "_id" : ObjectId("5a48b8061b98cc5ac252e436"), "value" : "b", "count" : 2 }
{ "_id" : ObjectId("5a48b8061b98cc5ac252e437"), "value" : "c", "count" : 2 }
> db.test.update({value: { $in: ["a", "b", "c"]}}, {$inc: {count:1}}, { upsert: true, multi: true });
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })

希望它有帮助:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何增加 MongoDB 中的现有值 的相关文章

随机推荐

  • 通过 Windows Live ID 登录桌面应用程序

    我想为我的桌面应用程序创建一个登录表单 用户可以使用 Windows Live ID 来实现此目的 我创建一个应用程序管理 dev live com并使用桌面实施部分 I use a WebBrowser控制并导航到给定地址 但我不知道如何
  • 如何获取字符串数组中的 Logger 值

    我用的是log4j Logger我已使用以下命令将日志值写入文件中FileAppender 现在我想在文本区域中显示日志值 如何将记录器值分配给字符串数组 您可以添加一个额外的Appender给你的Logger Use a 作家追加者写信给
  • 无法信任 iPhone 上的自签名证书

    我目前正在尝试使用自签名证书连接到服务器 我正在使用 NSURLConnection 连接到服务器 如何确保我只信任正确的服务器并取消所有其他连接 我正在使用以下代码 void connection NSURLConnection conn
  • 选择并分组

    我的查询是这样的 Select a abc a cde a efg a agh c dummy p test max b this sum b sugar sum b bucket sum b something 接下来是一些外连接和内连接
  • TPL 数据流:有限容量并等待完成

    为了简单起见 下面我将现实生活中的场景复制为 LINQPad 脚本 var total 1 1000 1000 var cts new CancellationTokenSource var threads Environment Proc
  • weblogic增加内存的方法

    我需要增加 weblogic 的内存 我是这方面的新手 我不知道如何 我需要设置 Xss 4096k 我怎样才能做到呢 Xss是Thread Stack Size 不是内存大小 您可以通过更改参数 Xmx 来更改内存大小 最重要的参数是 X
  • 在 ASP.NET Core 中使用源自 Microsoft.AspNet.Web.Optimization (.net-framework) 的“脚本”和“样式”

    我有一个简单的 ASP NET MVC 项目 需要将其移植到 ASP NET Core 在视图 cshtml 中我发现了类似的元素 Styles Render or Scripts Render Styles Render Content
  • 如何在 Google 电子表格上列出 Google 云端硬盘文件夹中的所有文件

    我有一个包含超过 2000 个文件的文件夹 我需要在谷歌电子表格上列出所有这些文件 我在网上找到了一些脚本 但它们并没有完全工作 当我点击 RUN 时 我只得到 250 个文件的列表 在 Google 开发者页面上阅读时 我发现了一些有关启
  • 具有两个标题行的表排序器

    我正在使用表排序器 jquery 插件我的表格标题中有两行 有什么方法可以在我的表上启用排序吗 它应该能够按第二个标题行排序 第一个标题行只是按日期对相关数据进行分组 如果使用此插件不可能做到这一点 也许有人有解决方法的建议 这是我的表格标
  • SQL Server 上的 varbinary 到 string

    如何将列值转换为varbinary max to varchar以人类可读的形式 以下表达式对我有用 SELECT CONVERT VARCHAR 1000 varbinary value 2 Here有关样式选择的更多详细信息 第三个参数
  • 检查是否从 iOS 设备访问 PHP 页面

    我有一个简单的 PHP 网页 并且希望返回不同的内容 具体取决于它是从 iPhone iPad 还是从网络浏览器访问 我怎样才能做到这一点 使用来自的用户代理 SERVER HTTP USER AGENT 对于简单的检测 您可以使用this
  • 如何检查网站上的值是否已更改

    基本上 如果网站上的值发生变化 我会尝试运行一些代码 Python 3 2 否则稍等一下 稍后再检查 首先 我认为我可以将值保存在变量中 并将其与下次运行脚本时获取的新值进行比较 但这很快就遇到了问题 因为当脚本再次运行并初始化该变量时 该
  • jquery ctrl+enter 作为在文本区域中输入

    I am trying to reproduce standard instant messenger behavior on TEXT area control enter works as send button ctrl enter
  • 如何在不使用更新数据库的情况下生成启用了迁移的 EF6 数据库?

    在 EF5 中 我依赖于这样一个事实 我可以使用以下命令从模型重新创建数据库Database CreateIfNotExists 我会根据需要生成迁移 但永远不会将它们签入源代码管理 因为它们往往是开发周期的工件 然后每个开发人员都会根据需
  • iTextSharp - 在电子邮件附件中发送内存中的 pdf

    我在这里问了几个问题 但仍然遇到问题 如果您能告诉我我的代码中做错了什么 我将不胜感激 我从 ASP Net 页面运行上面的代码并得到 无法访问关闭的流 var doc new Document MemoryStream memoryStr
  • 字符串数组长度显示为 1,即使调用后数组为空,用逗号 (,) 分割 [重复]

    这个问题在这里已经有答案了 这是我的代码 serialNumbers String serialArray serialNumbers split int arrayLength serialArray length 即使serialArr
  • 我可以观看另一个班级的 NSNotification 吗?

    我正在尝试了解 NSNotificationCenter 如果我的应用程序代理中有这样的内容 NSNotificationCenter defaultCenter addObserver self selector selector som
  • shell 中的浮点比较

    您能否向我建议在 Bash 脚本中进行浮点比较的语法 我理想地希望将其用作if陈述 这是一个小代码片段 key1 12 3 result 12 2 if result lt key1 then some code here fi bc是你的
  • 检测字符串中的 CJK 字符 (C#)

    我正在使用 iTextSharp 生成一系列 PDF 使用 Open Sans 作为默认字体 有时 姓名会插入 PDF 的内容中 然而我的问题是 我需要插入的一些名称包含 CJK 字符 存储在 SQL Server 中的 nvarchar
  • 如何增加 MongoDB 中的现有值

    我在用MongoDB 的 Stitch 平台 我想存储一个value and a count与数据库中的该值相关联 现在value可能不是第一次出现 所以我想插入value with count 1 我可以用update 使用以下命令更新