从 mongoid 获取 bson 文档上的空数组以获取新初始化的父对象

Get empty array on a bson doc from mongoid for newly initialized parent object

试图让我的初始对象有一个空数组,表示嵌入有许多当前没有嵌入文档的文档。

我可以在 json 字符串中嵌入文档或删除所有嵌入文档后获取关系。但是在嵌入任何文档之前,我没有在 json 字符串中获得 character_classes 属性。

您可以在 IRB 输出的下方和下方看到我的模型,以显示我使用 to_json 和 as_document 时得到的结果。第一组我在添加和删除之后都没有得到 character_classes...

问题:如何进行初始设置以将 character_classes 作为空数组传递?

===========型号==========================

class Character
  include Mongoid::Document
  include Mongoid::Timestamps

  embeds_many :character_classes
end

class CharacterClasses
  include Mongoid::Document
  include Mongoid::Timestamps

  embeds_in :character_classes

  field :title
  field :character_level
end

==========IRB==============================

> char = Character.first

=> #<Character _id: 550a1bd94e696383d1020000, created_at: 2015-03-19 00:44:09 UTC, updated_at: 2015-03-19 00:44:09 UTC>

> char.character_classes

=> []

> char.as_document

=> {"_id"=>BSON::ObjectId('550a1bd94e696383d1020000'), "updated_at"=>2015-03-19 00:44:09 UTC, "created_at"=>2015-03-19 00:44:09 UTC}

> char.to_json

=> "{\"_id\":{\"$oid\":\"550a1bd94e696383d1020000\"},\"created_at\":\"2015-03-19T00:44:09.232Z\",\"updated_at\":\"2015-03-19T00:56:01.257Z\"}"

> char.character_classes.create(title: "data")

=> [#<CharacterClass _id: 550a1d914e69638730000000, title: "data", character_level: 1>]

> char.as_document => {"_id"=>BSON::ObjectId('550a1bd94e696383d1020000'), "updated_at"=>2015-03-19 00:44:09 UTC, "created_at"=>2015-03-19 00:44:09 UTC, "character_classes"=>[{"_id"=>BSON::ObjectId('550a1d914e69638730000000'), "title"=>"data", "character_level"=>1}]}

> char.to_json

=>"{\"_id\":{\"$oid\":\"550a1bd94e696383d1020000\"},\"character_classes\":[{\"_id\":{\"$oid\":\"550a20a74e69638730010000\"},\"character_level\":1,\"title\":\"data\"}],\"created_at\":\"2015-03-19T00:44:09.232Z\",\"updated_at\":\"2015-03-19T00:56:01.257Z\"}"

> char.character_classes.destroy_all

=> 1

> char.character_classes

=> []

> char.as_document => {"_id"=>BSON::ObjectId('550a1bd94e696383d1020000'), "updated_at"=>2015-03-19 00:44:09 UTC, "created_at"=>2015-03-19 00:44:09 UTC, "character_classes"=>[]}

> char.to_json

=> "{\"_id\":{\"$oid\":\"550a1bd94e696383d1020000\"},\"character_classes\":[],\"created_at\":\"2015-03-19T00:44:09.232Z\",\"updated_at\":\"2015-03-19T00:56:01.257Z\"}"

已编辑

我意识到这个问题与 to_json 或 as_document 无关。它没有被拉取的原因是因为只有具有值的属性被放置在数据库中。因此,在创建新对象时,由于嵌入式文档不存在,因此它们还没有放入数据库中。因此,当我请求记录时,它只是提供具有某种价值的属性。

对于普通属性,我可以通过设置空白默认值来解决这个问题。但是 embeds many 没有默认选项。

有谁知道如何初始化关系以便将空数组放入数据库?

embeds_in :character_classes应该是CharacterClassesclass应该是embeds_in :character。参见 https://docs.mongodb.org/ecosystem/tutorial/mongoid-relations/#embeds-many