joh*_*odo 3 php associative-array mongodb
当我尝试从PHP向MongoDB 插入空关联数组(hashmap/ dictionary/ dict/ {})时,它总是作为非关联空数组(list/ [])插入.我可以强制关联数组吗?
例:
$m = new Mongo('mongodb://localhost:27017');
$db = $m->selectDB('test');
$collection = $db->selectCollection('test');
// 1: inserts []
$d = array( 'x' => array() );
$collection->insert($d);
// 2: inserts []
$d = array( 'y' => array('a'=>'123') );
unset($d['y']['a']);
$collection->insert($d);
// 3: inserts {}
$d = array( 'z' => array('a'=>'123') );
$collection->insert($d);
$collection->update(array('_id' => $d['_id']), array('$unset' => array('z.a'=>true)));
Run Code Online (Sandbox Code Playgroud)
结果如下:
> db.test.find().pretty()
{ "_id" : ObjectId("510fb9ede695c5381a000000"), "x" : [ ] }
{ "_id" : ObjectId("510fb9ede695c5381a000001"), "y" : [ ] }
{ "_id" : ObjectId("510fb9ede695c5381a000002"), "z" : { } }
Run Code Online (Sandbox Code Playgroud)
第三种方式做我想要的,但它有点尴尬,需要两个查询.有更好的解决方案吗?
无论您存储空对象还是数组,有什么区别?在BSON中,数组和对象以与dict相同的方式存储.无论如何,对你的问题.
对于PHP MongoDB驱动程序,空数组就是一个空数组,因此它将其存储为数组.向数组添加键/值对时,驱动程序理解它应该存储对象.
如果您确实要存储空对象,请尝试:
$d = new \stdClass();
$collection->insert(array('z' => $d));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4439 次 |
| 最近记录: |