当我尝试使用MongoID在哈希字段中保存一些数据时,我在Rails应用程序中偶然遇到过这个错误(并且被这个错误所困):
'$oid' is an illegal key in MongoDB
我没有发送任何带有密钥$oid
的数据到哈希,所以我无法弄清楚是什么导致它。
事实证明问题是当我在其中一个哈希中使用另一个对象的id
字段时。 MongoID对象的id字段不是字符串,它们是BSON::ObjectID
s,所以如果你试图将它们粘贴到这样的哈希:
ObjectWithHash.update(hash_field: {name: a_name, id: other_object.id})
MongoId将尝试将other_object.id
转换为Hash格式,并提出{"$oid" => "......."}
,导致错误显示。
要解决此问题,您可以先将其转换为字符串并存储:other_object.id.to_s