2013-10-28 58 views
0

我有一个数据库与mongomapper一个rails项目中的一些数据。简单的地方,查询返回没有结果mongomapper

在轨控制台:

[1] pry(main)> MyObject.first 
=> #<MyObject _id: BSON::ObjectId('525e6a9156c02c22de000002'), my_field: 1, 
... 

[2] pry(main)> MyObject.where(my_field: 1).all 
=> [] 
[3] pry(main)> MyObject.where(my_field: 1.to_s).all 
=> [] 
[4] pry(main)> MyObject.where(my_field: "1").all 
=> [] 

我缺少什么?

回答

0

其因的缩写

在我的模型:

key :my_field, String, required: true, abbr: :mf 

正确的查询:

[5] pry(main)> MyObject.where(mf: "1").all 
=> [#<MyObject _id: BSON::ObjectId('525e6a9156c02c22de000002'), my_field: 1, 
... 

恕我直言,这个缩写的事情是疯狂

这是一个super leaky abstraction处理key names stored in the document in MongodDB这个事实。

+0

如果ruby驱动程序不支持别名,请确保您在此选择正确的折衷方案。如果这个集合有一百万个文档,而且每个节省了40个字节,那么这只是你节省的40MB,不值得让IMHO感到困扰。 – mnemosyn

+0

关于漏洞抽象:我不同意。这根本不是抽象的。假设*数据库中的对象应该都具有相同的格式(如表中所示),但是MongoDB是*文档存储*,其中假设不成立。但是那是因为它不*在其他dbs上放置抽象。这里的罪魁祸首是ruby驱动程序,它不支持查询中的映射。 – mnemosyn

+0

我的问题是,我必须一直记住* 2个名字。取决于我在哪里,我必须*想*关于使用哪一个... –