当尝试使用MongoID将一些数据保存在Hash字段中时,我在Rails应用程序中多次遇到(并被这个错误所困扰):
'$oid' is an illegal key in MongoDB
我没有将带有密钥$oid
的任何数据发送到哈希中,因此我无法弄清楚是什么原因造成的。
答案 0 :(得分:1)
原来的问题是,当我在其中一个哈希中使用另一个对象的id
字段时。 MongoID对象的id字段不是字符串,而是BSON::ObjectID
,因此,如果您尝试将它们放入这样的哈希中:
ObjectWithHash.update(hash_field: {name: a_name, id: other_object.id})
MongoId将尝试将other_object.id
转换为Hash格式,并提出{"$oid" => "......."}
,从而导致显示错误。
要解决此问题,您可以先将其转换为字符串并将其存储:other_object.id.to_s