这看起来很简单,但显然我错过了一些东西。我有一个网站模型:
class WebSite
include Mongoid::Document
has_many :domains, inverse_of: :web_site
field :name, type: String
end
网站模型有一个嵌入的域数组:
class Domain
include Mongoid::Document
belongs_to :web_site, inverse_of: :domains
field :name, type: String
end
我要做的就是找到一个域为“test.com”的网站。无论是使用 Mongoid 还是使用 MongoDB 控制台,我尝试过的任何方法似乎都不起作用。例如,如果我有一个网站,一个域,名称为“test.com”:
2.0.0p0 :001 > WebSite.count
=> 1
2.0.0p0 :002 > WebSite.first.domains
=> [#<Domain _id: 5148d9b76a3b8b1fe6000003, web_site_id: "5148d9a96a3b8b1fe6000002", name: "test.com">]
......那么这不应该工作吗?
2.0.0p0 :003 > WebSite.elem_match(domains: { name: "test.com" }).count
=> 0
2.0.0p0 :004 > WebSite.elem_match('domains' => { 'name' => "test.com" }).count
=> 0
我得零。我应该得到一个。
我还从 O'Reilly 的书中得到了这样的印象:这应该可行:
2.0.0p0 :005 > WebSite.where('domains.name' => "test.com").count
=> 0
...与 any_in 相同:
.0.0p0 :006 > WebSite.any_in('domains' => { 'name' => "test.com" }).count
=> 0
我还尝试了来自 MongoDB 控制台的相同查询,结果相同:
> db.web_sites.find({"domains" : {"$elemMatch" : {"name" : "test.com"}}}).size();
0
> db.web_sites.find({"domains.name" : "test.com"}).size();
0
> db.web_sites.find({"domains" : {$in : {"name" : "test.com"}}}).size();
0
我肯定错过了什么?
更新:
以下是来自 MongoDB 控制台的有关架构的更多信息:
> db.web_sites.find().pretty()
{ "_id" : ObjectId("5148d9a96a3b8b1fe6000002"), "name" : "test" }