【发布时间】:2015-01-30 21:23:50
【问题描述】:
我对 MongoDB 很陌生,并且遇到了一些小问题。在 Mongo 中,我从数据库中获取的每个对象都有那个特殊的 _id 字段。当然需要这个字段来唯一标识我的对象。
现在在 PHP 中,我的对象作为带有特殊 _id 字段的数组返回。
Array (
[_id] => MongoId Object (
[$id] => 547dc96b5c5db8a80f000029
)
[somekey] => somevalue
)
当编码为 JSON,通过一些前端发送并再次在 PHP 中解码时,_id 字段当然已被强制转换/销毁。
为了避免这种情况,我想我必须在从 Mongo 数据库中获取 _id 字段后强制转换它。
Array (
[_id] => 547dc96b5c5db8a80f000029
[somekey] => somevalue
)
现在可以按照我的意愿安全地对其进行编码和解码。
但是当这个对象再次保存在 MongoDB 中时会起作用吗?即使在这种形式下,Mongo 会使用 _id 字段,因为它是 Mongo ObjectId 还是我需要相应地重新转换它?
有没有更好的方法呢?
更新 我只是尝试保存一个对象几次,它的 _id 作为 MongoId,它的 _id 作为字符串。具有 MongoId 的对象不替换具有与字符串相同的 _id 的对象,在此处键入很重要。
这意味着我从数据库中获取的每个对象都需要手动转换它的 _id,并且在再次使用客户端从某些 JSON 接收到它之后,我必须再次将 evrry _id 重新转换为 MongoId。 在加载较大的对象列表时,这可能会对性能产生严重影响。
有没有更好的办法?
【问题讨论】:
-
将代表
_id的字符串改回一个对象?$array['_id'] = new MongoId('547dc96b5c5db8a80f000029'); -
@Glavić 所以你认为我必须将每个 _id 重铸回 MongoId 对象,然后再将它们发送到数据库?
-
最简单的方法是对此进行测试,但我认为如果
_id以字符串形式呈现,它将替换 mongodb 中的对象。请试一试... -
@Glavić 试过了。见更新。奇怪...
-
So _id is treated as unique field, no matter what type it has.是 mongodb 的工作原理。字段_id是始终唯一的字段,无论它是什么类型;这就是它应该如何工作的。