使用 MongoCollection::findOne() 方法

要查看我们上一步插入到数据库的文档,可以简单的使用 MongoCollection::findOne() 方法从即合理获得一个简单的文档。 这个方法在只想查询一个结果的时候很有用。

<?php
$connection 
= new MongoClient();
$collection $connection->database->collectionName;

$document $collection->findOne();
var_dump$document );
?>

以上例程会输出:

array(6) {
  ["_id"]=>
  object(MongoId)#8 (1) {
    ["$id"]=>
    string(24) "4e2995576803fab768000000"
  }
  ["name"]=>
  string(7) "MongoDB"
  ["type"]=>
  string(8) "database"
  ["count"]=>
  int(1)
  ["info"]=>
  array(2) {
    ["x"]=>
    int(203)
    ["y"]=>
    int(102)
  }
  ["versions"]=>
  array(3) {
    [0]=>
    string(5) "0.9.7"
    [1]=>
    string(5) "0.9.8"
    [2]=>
    string(5) "0.9.9"
  }
}

注意:有一个 _id 字段被自动添加到你的文档中了。 _id 字段就是集合的“主键”。 如果插入文档的时候你没有手动指定,驱动就会自动帮你添加一个。

如果你所插入的文档定义了 _id 字段,那么它在集合中必须是唯一的。 这是一个例子:

<?php
$connection 
= new MongoClient();
$db $connection->database;

$db->foo->insert(array("_id" => 1));
// this will throw an exception
$db->foo->insert(array("_id" => 1));

// this is fine, as it is a different collection
$db->bar->insert(array("_id" => 1));
?>

默认设置时,驱动会在服务器通过了写入请求后返回(译注:“通过”即如果不发生崩溃等情况,待插入的文档就一定会在随后被写入,这并不意味着数据已经写入磁盘)。你可以通过将第二个参数设为 array("w" => 0) 来改变默认行为。此时你的插入请求会立即返回,并且不会抛出 _id 重复的异常。

参见

MongoCollection::findOne() 方法的文档中有对查询的详细说明。

唯一ID的信息查看 MongoId

写入 部分更详细的说明了写操作, Write Concerns 章节深入解释了一些写操作的选项。

关注编程学问公众号