下面的代码将插入一个文档,mongodb中的文档将如下所示:
{ "_id" : ObjectId("5510d1ad7f8b9aaf318b457b"), "0" : "a", "1" : "b", "2" : "c", "d" : [ NumberLong(1), NumberLong(2), NumberLong(3), NumberLong(4) ], "tags" : [ "mongodb", "mysql", "redis" ] }
为什么mongodb自动为我添加一些键:"0"、"1"、"3"但是标签值没有?
<?php
$doc = array(
'a',
'b',
'c',
'd' => array(1,2,3,4),
"tags" => array('mongodb', 'mysql', 'redis')
);
$client = new MongoClient();
$client->d->test->insert($doc);
$cursor = $client->d->test->find();
foreach($cursor as $item)
{
echo "<br>";
echo json_encode($item);
}
引用文档
可以使用array()语言构造创建数组。它采用任意数量的逗号分隔键=>值对作为参数。
如果您没有指定可选的键值,PHP将使用以前使用的最大整数键的增量。因此print_r($doc)
将显示在输出下方。
Array
(
[0] => a
[1] => b
[2] => c
[d] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
[tags] => Array
(
[0] => mongodb
[1] => mysql
[2] => redis
)
)
话虽如此。
为什么mongodb自动为我添加了一些键:"0"、"1"、"3",但标记值没有?
MongoDB将密钥用作文档中的字段,由于您没有为'a'
、'b'
和'c'
整数指定密钥,因此将密钥用作字段名称,这不是您想要的。
引用文档
请注意,您可以有嵌套的数组和对象。驱动程序将始终将关联数组作为对象存储在数据库中。如果键从0开始且未被中断,则数字索引数组存储为数组;如果数组键不从0开始或有间隙(即:0、1、4、5),则存储为对象。