- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
使用 Mongoid,假设我有以下类:
class Map
include Mongoid::Document
embeds_many :locations
end
class Location
include Mongoid::Document
field :x_coord, :type => Integer
field :y_coord, :type => Integer
embedded_in :map, :inverse_of => :locations
end
class Player
include Mongoid::Document
references_one :location
end
如您所见,我正在尝试为一个简单的游戏世界环境建模,其中 map 嵌入了位置,玩家将单个位置引用为他们的当前位置。
使用这种方法,当我尝试引用 Player 类的“位置”属性时出现以下错误:
Mongoid::Errors::DocumentNotFound: Document not found for class Location with id(s) xxxxxxxxxxxxxxxxxxx.
我的理解是,这是因为 Location 文档是嵌入的,因此很难在其嵌入文档( map )的范围之外进行引用。这是有道理的,但是如何对嵌入文档的直接引用进行建模呢?
最佳答案
因为 map 是它们自己的集合,您需要遍历每个 map 集合,在其中搜索您的播放器被引用的位置。
您不能直接访问嵌入的文档。您必须通过收藏进入并向下工作。
为避免迭代所有 map ,您可以在 Player 文档中存储位置引用和 map 引用。这允许您链接选择您的 map 的标准,然后选择其中的位置。你必须在你的 Player 类上编写一个方法来处理这个。
def location
self.map.locations.find(self.location_id)
end
因此,类似于您自己回答的方式,只是您仍然可以将 location_id 存储在播放器文档中,而不是使用坐标属性。
另一种方法是将 map 、位置和玩家放在他们自己的集合中,而不是将位置嵌入到您的 map 集合中。然后你可以使用引用关系而不做任何花哨的事情......但是你真的只是使用分层数据库就像它是一个关系数据库......
关于ruby - 如何在 Mongoid 中引用嵌入的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3890633/
我不得不跟踪脏东西。它适用于 parent 博士。但是当我更改嵌入或引用的文档时,脏 必须通过文档本身的嵌入/引用来访问。 如何跟踪父文档本身的脏? 最佳答案 我已经整理了 mongoid 扩展来解决
给定一个带有如下扩展的简单嵌入关系: class D include Mongoid::Document embeds_many :es do def m #...
因此,似乎没有任何干净的方法可以通用地允许具有强参数的 Hash 字段。这当然可能是一个强大的参数问题,但我很好奇是否有解决方法。我有一个包含一些字段的模型... field :name, type:
当我尝试查询 Mongoid 条件的结果并仅保留字段不同的文档时,我感到非常沮丧。这样做: Books.all.distinct(:name) ..只返回名称字段,而不是文档。 还使用 uniq此处另
Mongoid 提供了一些 rake 任务,其中之一为数据库中的所有集合创建索引: 耙数据库:创建索引 但是如果我错了请纠正我,创建索引与实际索引所有项目不是不同吗?我怎样才能重新索引我的文档?如果我
我有一个订阅者类,它有 embeds_many 订阅。订阅具有属性状态。我想添加对状态的验证,以便每个订阅者只有一个订阅可以具有“事件”状态。订户可以拥有多个状态为“已购买”或“已过期”的订阅。 最佳
Mongoid 提供方法 create 和 create!比如 Artist.create(name: "Pablo Picasso") 或 Artist.create!(name: "Pablo P
在 Mongoid 2.x 中,可以执行 Mongoid.database.connection.close 来重置数据库连接。这个特定的 API 在 Mongoid3 中不再可用,重置连接的新方法是
我有一个名为“艺术家”的集合,我想将其重命名为“artist_lookups”。我该怎么做? 最佳答案 使用 mongoid5/mongo ruby 驱动程序 2: # if you need t
目前我为我的类(class)设置了 default_scope,但我希望 rails_admin 使用 .unscoped 执行列表查询 有什么办法可以做到这一点吗?我没有看到覆盖 rails_adm
我知道可以通过数据库调用找到它,但出于好奇,例如在 Node 中,如果我有一个 Mongoose 文档 ID 数组。我如何针对该数组模拟 indexOf 函数以确定其中是否有另一个 mongoId?
Mongoid 没有超时选项。 http://mongoid.org/en/mongoid/docs/installation.html 我希望 Mongoid 终止长时间查询。如何设置 Mongoi
我似乎无法在这里或通过Google找到答案,任何帮助都很棒。 建筑物可以正确保存,但是嵌入式文档PriorityArea不会更新... 我想最终让它均匀地为新的优先级区域添加一个新表格,但是需要首先对
根据 github 上 mongoid 的自述文件,我可以做一些奇特的查询,比如Person.select(:first_name, :last_name).where(:title => "Sir"
有谁知道如何索引和搜索embedded documents与 sunpot_mongoid ? 问题已在 sunspot_mongoid issues 中提出,但至今无解。 最佳答案 刚试过。这是一个
我有一个来自 Devise 的模型用户具有这种关系: 用户名 # Relationships references_many :houses, :dependent => :delete 现在我有一
我在控制台上执行此查询,但是我不能简单地复制并粘贴它以在 mongo shell 中执行它。 有什么方法可以将mongoid DSL转换成真正的mongo查询语句。 谢谢 database=test
在文档中它说你可以使用 inverse_of: nil 但并没有真正描述用例: http://mongoid.org/en/mongoid/docs/relations.html#has_and_be
我正在将 mongoid-history gem 添加到我的项目中。 根据指南in github ,当我将 Userstamp 添加到我的跟踪器时,它会创建 created_by 字段,并使用名为 c
Mongoid.master.collection("seq").find_and_modify({ :query => {:_id => self.class.name}, :up
我是一名优秀的程序员,十分优秀!