'$ oid'是MongoDB中的非法密钥

时间:2019-04-17 19:00:54

标签: ruby-on-rails ruby-on-rails-5 mongoid

当尝试使用MongoID将一些数据保存在Hash字段中时,我在Rails应用程序中多次遇到(并被这个错误所困扰):

'$oid' is an illegal key in MongoDB

我没有将带有密钥$oid的任何数据发送到哈希中,因此我无法弄清楚是什么原因造成的。

1 个答案:

答案 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