最近在用Yii2 + mongodb做个小项目,该笔记用于记录使用过程中的不便之处,将来扩展之。
- 插入数据指定_id:ActiveRecord::insertInternal方法中,会将数据库返回结果中的_id值覆盖当前AR的attributes中的_id,当插入数据指定了_id时,会被NULL值覆盖掉。
- 搜索_id为非ObjectId且包含大写字母的记录:底层调用ensureMongoId时,new ObjectId($id),会更改$id值转为小写字符,导致搜索结果为空。
- 对数据结构含层级的情况支持程度不够,比如下面的结构,如果希望将Location实例化为对象,没有现成的基类可用,而且hasOne, hasMany也无法支持$this->hasOne(City::className(), ['_id' => 'location.province_id'])这种情况。
{
"_id": "sp_57c106ce1244e70",
"name": "空间名称"
"location" : {
"coordinate" : [
116.403875,
39.915168
],
"province_id" : 110000,
"city_id" : 110100,
"district_id" : 110101,
"street" : "望京宏泰东街",
"building" : "绿地中心B座"
}
}
- 打算做个ConstActiveRecord,数据源从文件读取,但需要拥有AR各项特性。