首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Mongoid不通过.create覆盖现有文档。

Mongoid不通过.create覆盖现有文档。
EN

Stack Overflow用户
提问于 2013-09-20 06:52:58
回答 2查看 731关注 0票数 0

我有以下课程:

代码语言:javascript
运行
AI代码解释
复制
class Magazine
  include Mongoid::Document

  field :name
  field :count
  field :_id, default: -> { name }

我通过Magazine.create!(name: "Yolo", count: 2)创建这种类型的新文档。这个很好用。现在,当我想在MongoDB中更新这个文档时,因为计数发生了变化,我认为这样做是可行的:

代码语言:javascript
运行
AI代码解释
复制
Magazine.create!(name: "Yolo", count: 42)

名称映射到相同的标识符,因此文档会被覆盖。虽然看起来操作是成功的,但是在MongoDB中,文档没有被更新。

相反,我不得不这样做:

代码语言:javascript
运行
AI代码解释
复制
Magazine.where(name: "Yolo").first.update_attributes!(count: 42)

这是可行的,但是有人能解释为什么我的第一种方法不能工作,如果我的第二种方法是通过Mongoid更新文档的常用方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-20 09:27:13

这个问题在我的机器上反复出现,我找到了解决办法。

根据Model#create!文档,如果发生验证错误,而不是数据库错误,则会引发错误。所以这不是你问题的解决方案。

http://mongoid.org/en/mongoid/docs/persistence.html#custom with(safe: true)可以告诉Mongoid引发司机骑着脚踏车中定义的数据库错误。在你的案子里。该错误看起来如下:

代码语言:javascript
运行
AI代码解释
复制
1.9.3-p0 :009 > Magazine.with(safe: true).create!(name: "Yolo", count: 42)
Moped::Errors::OperationFailure: The operation: #<Moped::Protocol::Command
  @length=71
  @request_id=7
  @response_to=0
  @op_code=2004
  @flags=[]
  @full_collection_name="mongoid.$cmd"
  @skip=0
  @limit=-1
  @selector={:getlasterror=>1, :safe=>true}
  @fields=nil>
failed with error 11000: "E11000 duplicate key error index: mongoid.magazines.$_id_  dup key: { : \"Yolo\" }"

此外,可以将安全模式设置为配置YAML中的默认模式,如文档中所述。

也许您希望找到一本带有Magazine.find("Yolo")的杂志来使用默认情况下由MongoDB创建的_id索引。即使_idname相同,Mongoid也不够聪明,无法使用_id查找文档。

票数 2
EN

Stack Overflow用户

发布于 2013-09-20 07:05:31

我想我有点惊讶你的第二个电话创造!不会引起错误。

尝试使用find方法与update相结合,这是用于更新属性的一个非常常见的一行:

代码语言:javascript
运行
AI代码解释
复制
Magazine.find('Yolo').update_attributes(count: 42)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18919783

复制
相关文章
【Java实现】向现有Map键追加值而非覆盖
使用this.put(“String”, “String”)方法添加一个键值对。但是,它会覆盖现有值,而我想使用同一个键存储和配对多个值。
JavaEdge
2022/11/30
1.3K0
Spring认证中国教育管理中心-Spring Data MongoDB教程二
原标题:Spring Data MongoDB参考文档二(内容来源:Spring中国教育管理中心)
IT胶囊
2021/11/12
2.7K0
Spring认证中国教育管理中心-Spring Data MongoDB教程二
如何从 MongoDB 迁移到 MySQL
最近的一个多月时间其实都在做数据库的迁移工作,我目前在开发的项目其实在上古时代是使用 MySQL 作为主要数据库的,后来由于一些业务上的原因从 MySQL 迁移到了 MongoDB,使用了几个月的时间后,由于数据库服务非常不稳定,再加上无人看管,同时 MongoDB 本身就是无 Schema 的数据库,最后导致数据库的脏数据问题非常严重。目前团队的成员没有较为丰富的 Rails 开发经验,所以还是希望使用 ActiveRecord 加上 Migration 的方式对数据进行一些强限制,保证数据库中数据的合法。
哲洛不闹
2018/10/18
5.5K0
如何从 MongoDB 迁移到 MySQL
Mac OSX 给现有的应用追加基于文档的功能
在Xcode中创建Cocoa Application 工程时,通常有两种选择类型:<code>基于文档的Application</code> 和<code>非文档的Application</code>,具体是哪一种类型,关键在于创建工程的时候,你是否选中下图中的<code>Create Document-based Application</code>选项:
代码行者
2018/08/23
6460
Mac OSX 给现有的应用追加基于文档的功能
翻遍全网!找到最好的【Java实现】向现有Map键追加值而非覆盖
使用this.put(“String”, “String”)方法添加一个键值对。但是,它会覆盖现有值,而我想使用同一个键存储和配对多个值。
JavaEdge
2021/04/09
6710
【测试】语句覆盖,判定覆盖,条件覆盖,路径覆盖
大家好,又见面了,我是你们的朋友全栈君。 白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。六种覆盖标准发现错误的能力呈由弱到强的变化:
全栈程序员站长
2022/08/09
2.8K0
Spring认证中国教育管理中心-Spring Data MongoDB教程十三
原标题:Spring认证中国教育管理中心-Spring Data MongoDB教程十三(内容来源:Spring中国教育管理中心)
IT胶囊
2021/11/29
2.9K0
Spring认证中国教育管理中心-Spring Data MongoDB教程十三
undefined pthread_create_pthread_key_create
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
4880
MySQL create table as与create table like对比
      在MySQL数据库中,关于表的克隆有多种方式,比如我们可以使用create table ..as .. ,也可以使用create table .. like ..方式。然而这2种不同的方式还是有些差异的,他的差异到底在哪里呢,本文通过演示对此展开描述。
Leshami
2018/08/13
4.4K0
当心 CREATE TABLE AS
对 DBA 而言,CREATE TABLE AS 可谓是家常便饭,顺手拈来。需不知该方式虽然简单,但疏忽也容易导致意想不到的问题。笔者前阵子就碰上 了这样的事情。由于是对原表进行克隆,且数据存储在不同的表空间,因此毫不犹豫地使用了CREATE TABLE AS,结果在运行package时,error...
Leshami
2018/08/14
5300
pytest文档57-单元测试代码覆盖率(pytest-cov)
我们在做测试的时候,经常遇到领导的灵魂拷问:你的测试用例覆盖率是多少,达到100%了么?你如何保证你的测试质量? 测试用例的覆盖率如何统计呢,如何知道开发的代码,我们都测到了,不会存在漏测的情况。
上海-悠悠
2020/09/18
5K0
win10 uwp 发布的时候 ILC 编译不通过
在 UWP 的发布中,需要通过 ILC 将代码编译为 Native 代码,但是在发布的 Microsoft.NETCore.UniversalWindowsPlatform 的 6.2.2 或 6.2.3 版本会让 ILC 无法编译
林德熙
2022/08/04
2090
Create Assembly Template
--============================================================= -- Create Assembly Template --============================================================= IF EXISTS( SELECT * FROM sys.assemblies WHERE name = N'<assembly_name, SYSNAME, MyCla
赵腰静
2018/03/09
7200
create()方法详解
create() 方法将自动收集提交的表单数据并创建数据对象而无需人工干预,这在表单数据字段非常多的情况下更具优势。
PM吃瓜
2019/08/12
2.2K0
Create Assembly Template
--============================================================= -- Create Assembly Template --============================================================= IF EXISTS( SELECT * FROM sys.assemblies WHERE name = N'<assembly_name, SYSNAME, MyCla
赵腰静
2018/03/09
6490
忽略https域名校验不通过
公司有一些标准的对外https服务,内部调用也需要走https的方式,但是可以用内部IP,这个时候就会遇到证书校验域名不通过的问题,需要忽略。本文分别介绍curl,wget和okhttp中忽略域名校验的方法 curl 错误内容 curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate. 忽略方式 一种是添加临时域名解析缓存的方式,
十毛
2021/02/04
9.2K1
mongo实现自增id
Mongo 的free schema,提供了灵活的数据结构,和快速开发的能力,但是也造成了松散的数据组织形式。比如说有些字段不允许为null的,需要符合一定格式的。也就是数据库的校验,validator。这个功能在mongo 3.2才提供,之前是并没有的。这里提供一种基于MongoEvent的解决方案,来实现对于数据的校验。
方丈的寺院
2019/08/05
4.3K0
mongo实现自增id
变量覆盖
什么是变量覆盖呢? 变量覆盖指的是用我们自定义的参数值替换程序原有的变量值, 一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击。
宸寰客
2020/09/07
4.4K0
变量覆盖
矩阵覆盖
题意 我们可以用 2 * 1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2 * 1 的小矩形无重叠地覆盖一个 2 * n 的大矩形,总共有多少种方法? 样例 对于一个 2 * 3 的矩阵,返回 3。 思路 当 n 为 1 时,也就是 2 * 1 的大矩阵,只有一种方法: 当 n 为 2 时,也就是 2 * 2 的大矩阵,有两种方法: 当 n 为 3 时,也就是 2 * 3 的大矩阵,有三种方法: 当 n 为 4 时,也就是 2 * 4 的大矩阵,应该有几种方法呢? 4.1 根据原来 n =
一份执着✘
2018/06/04
1.3K0
不通过浏览器获取公网 IP
Google 等公司会编写程序,监听在它们类似 o-o.myaddr.l.google.com 的地址上。只要有请求,就会将请求的源 IP 地址作为数据直接返回。
全栈程序员站长
2022/07/19
8090

相似问题

覆盖mongoid文档查找

10

Mongoid:检查现有文档/嵌入式文档

10

Elastica添加文档覆盖现有文档

28

Mongoid随机文档

83

Mongoid查询文档

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文