问题标签 [mongodb-update]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1695 浏览

mongodb - 如何更新Mongodb中子文档数组中的元素

尝试在 Mongo 中更新子文档数组中的元素时遇到问题。如果我考虑集合“资源”中的以下文档

我想更新"item4"一些其他值,比如"item5"for"resource_id" = 2

以下语句给了我一个错误:如果没有包含数组的相应查询字段,则无法应用位置运算符

db.resource.update({"resources.resource_id": 2, "resources.resource_list": "item4"}, {$set: {"resources.$.resource_list.$": "item5"}})

对此的任何帮助将不胜感激。

0 投票
2 回答
3518 浏览

mongodb - mongodb更新100万条记录

我有一个包含 100 万份文档的集合。每个文档都有一个 ip 字段。我有一个节点函数,它可以通过将 ip 作为其参数传递给我国家代码。我将获取所有记录,运行我的节点函数,将返回的国家名称插入回文档中。并立即更新它们。但是,mongodb 有 16M 数据的限制。

我的问题是如何安全快速地更新这 100 万条记录。

0 投票
2 回答
1005 浏览

mongodb - Casbah MongoDB,如何在单个操作中向多个文档中添加和删除值?

搜索后,我无法弄清楚如何对单个字段执行多次更新。

我有一个带有“标签”数组字段的文档。在我开始更新之前,每个文档都会有随机标签。在单个操作中,我想添加一些标签并删除一些标签。

以下更新运算符返回错误“指定的修饰符无效:$and”

如何在单个操作中向多个文档中的数组添加和删除值?

0 投票
2 回答
5494 浏览

mongodb - Mongo 更新同时排除某些字段

这听起来类似于 Mongo $set。在这种情况下,我想更新文档(更新和/或删除字段),但忽略字段 creatorName,使其保持不变。

示例文档:

更新为:

如果我使用 set,creatorName 保持不变(好)并且 firstName 和 lastName 被更新(好),但 middleName 没有被删除(坏)。Set 限制在更新期间删除字段的能力。

这可以在查询中完成吗?没有$未设置?

0 投票
1 回答
40 浏览

mongodb - 为什么我的 MongoDb 查询在更新时插入了嵌入文档?

这是我的 MongoDB 查询:

显然我不能使用“artists.$.soundcloud_toggle”来更新艺术家数组中的所有艺术家文档:

“$ 运算符可以更新与 $elemMatch() 运算符指定的多个查询条件匹配的第一个数组元素。http: //docs.mongodb.org/manual/reference/operator/update/positional/

我很高兴多次运行查询来更改数组的索引,以便在与查询匹配的每个事件中设置每个艺术家的 soundcloud_toggle 属性,例如

问题是:当有人说,艺术家数组中只有一个艺术家文档并且我使用“artists.1.soundcloud_toggle”运行查询时,它将使用单个属性将艺术家文档插入到艺术家数组中:

(我已经声明了“upsert:false”,无论如何默认情况下应该是假的)

当那里没有现有文档时,如何阻止查询插入文档并设置 soundcloud_toggle:false?如果艺术家存在于给定的艺术家数组索引中,我只希望它更新属性。

0 投票
2 回答
8394 浏览

node.js - 使用带有 Upsert 的更新为 true 时未设置默认值

我有以下用户模型:

如您所见,“created”字段采用当前日期的默认值,以便在创建新用户时自动设置。

发布用户详细信息时,我使用以下查询:

使用findOneAndUpdatewith的目的upsert: true是要么返回现有配置文件,要么创建一个新配置文件。它还会根据发布的数据更新任何字段。

但是,那created字段每次都会更新为当前日期,即使未发布创建的字段。如何确保该字段只设置一​​次?

编辑

来自数据库的示例对象:

事实证明,created即使在使用 upsert 创建新对象时,也没有设置该字段。Mongoose 只是根据模式返回当前日期,即使它在文档中不存在。

所以,现在的问题变成了:如何确保 usingupsert为参数中未提供的字段创建默认值?

0 投票
1 回答
589 浏览

mongodb - MongoDB查找和修改请求更新

我的 MongoDB 数据库中的产品具有以下结构:

我的pymongo脚本从一个商店转到另一个商店,我尝试做以下事情:

  • 如果产品不在数据库中:使用当前 store_id 的当前价格和日期添加有关产品的所有信息。
  • 如果产品在数据库中,但我没有当前 stroe 的任何条目:添加一个stores包含当前价格、日期和 store_id 的条目。
  • 如果产品在数据库中,并且我有当前商店的价格条目,但当前价格不一样:为当前 store_id 添加一个带有新日期和价格的新条目。

是否可以在一个请求中完成所有操作?现在我一直在尝试以下方法,但并不真正知道如何处理storesprices案例。
也许这不是构建我的数据库的最佳方式,我愿意接受建议。

0 投票
1 回答
35 浏览

python - 为什么 mongodb 更新方法会创建一个扩展名为 '_keys' 的新集合?

我使用 mongoDB 方法 update 来修改名为annotations. 我用 Python 脚本编写的命令是:

orthologs必须修改该字段以包含UniProt由名为 的变量给出的新子字段orthologs

令人惊讶的是,创建了一个名为 的新集合annotations_keys。它只包含一个文件:{ "_id" : "UniProt", "value" : null }.

正常吗?如果不是,问题是什么?

0 投票
1 回答
5687 浏览

mongodb - mongodb更新匹配的文档失败

mongoimport 导入 10000 个文档,_id 为 6 长随机字符串

因为 mongoimport 不能指定数据类型,所以像“123456”这样的字符串被导入为 int 类型。所以我手动删除原件并将它们重新插入为

因为0的默认类型是Double,所以我把它们改成int:

似乎 6 文档更改失败,我通过以下方式验证更改:

更新仅修改由 mongoimport 导入的文档,但不保留我手动插入的文档,为什么?

0 投票
2 回答
3420 浏览

mongodb - 向集合中的当前文档添加新字段时,Meteor.users.update 访问被拒绝

我正在寻找向当前文档添加一个新字段(将来将使用 $push 填充的数组)但出现错误update failed: MongoError: Cannot apply $push/$pushAll modifier to non-array

我正在研究 Meteor.users 集合。

运行的代码是: