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

问题描述 投票:0回答:1

当我尝试使用MongoID在哈希字段中保存一些数据时,我在Rails应用程序中偶然遇到过这个错误(并且被这个错误所困):

'$oid' is an illegal key in MongoDB

我没有发送任何带有密钥$oid的数据到哈希,所以我无法弄清楚是什么导致它。

ruby-on-rails ruby-on-rails-5 mongoid
1个回答
1
投票

事实证明问题是当我在其中一个哈希中使用另一个对象的id字段时。 MongoID对象的id字段不是字符串,它们是BSON::ObjectIDs,所以如果你试图将它们粘贴到这样的哈希:

ObjectWithHash.update(hash_field: {name: a_name, id: other_object.id})

MongoId将尝试将other_object.id转换为Hash格式,并提出{"$oid" => "......."},导致错误显示。

要解决此问题,您可以先将其转换为字符串并存储:other_object.id.to_s

© www.soinside.com 2019 - 2024. All rights reserved.