|
TutorialIntroductionThis is the 10gen-supported PHP driver for MongoDB. Here's a quick code sample that connects, inserts documents, queries for documents, iterates through query results, and disconnects from MongoDB. There are more details on each step in the tutorial below.
<?php This would output: Calvin and Hobbes XKCD Making a ConnectionTo connect to the database server, use one of the following:
<?php You do not have to explicitly disconnect from the database. When $connection goes out of scope, the connection will be closed automatically and any database resources it was using will be freed. See AlsoThe chapter on connecting covers different types of connections. The API documentation on the Mongo class and Mongo::__construct() give a comprehensive look at all possible options with a number of examples. Getting a DatabaseTo select a database, use:
<?php The database does not need to be created in advance, you can create new databases by selecting them. Be careful of typos! You can inadvertently create a new database, which can cause confusing errors:
<?php See AlsoThe API documentation on the MongoDB class contains more information about database objects. Getting A CollectionGetting a collection has the same syntax as getting a database:
<?php A collection is analogous to a table (if you are familiar with relational databases). See AlsoThe API documentation on the MongoCollection class contains more information about collection objects. Inserting a DocumentAssociative arrays are the basic object that can be saved to a collection in the database. A somewhat random "document" might be:
<?php Note that you can have nested arrays and objects. To insert this document, use MongoCollection::insert():
<?php See AlsoThe API documentation on MongoCollection::insert() contains more information about inserting data. Finding Documents using MongoCollection::findOne()To show that the document we inserted in the previous step is there, we can do a simple MongoCollection::findOne() operation to get a single document from the collection. This method is useful when there only is one document matching the query or you are only interested in one result.
<?php This should print: 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" } } Note that there is an _id field that has been added automatically to your document. _id is the "primary key" field. If your document does not specify one, the driver will add one automatically. If you specify your own _id field, it must be unique to the collection. See the example here:
<?php Note that these inserts pass a second array: array("safe" => true). This second field specifies options for the insert. By default, the driver does not wait for a database response for writes, so the driver would not catch the the _id. As we specify that this is a "safe" write, the driver will wait for a database response and see that the write did not go through. In general, all writes should use the "safe" option (it is omitted in previous examples for simplicity). See AlsoMongoCollection::findOne() for more information about finding data. MongoId goes into more detail on unique ids. The writes section covers safe writes in more depth, as do the writing functions such as MongoCollection::insert(), MongoCollection::update(), and MongoCollection::remove(). Adding Multiple DocumentsIn order to do more interesting things with queries, let's add multiple simple documents to the collection. These documents will just be of the form array( "i" => value ); and we can do this fairly efficiently in a loop:
<?php Notice that we can insert arrays with different key sets into the same collection. This aspect is what we mean when we say that MongoDB is "schema-free". Counting Documents in A CollectionNow that we've inserted 101 documents (the 100 we did in the loop, plus the first one), we can check to see if we have them all using the MongoCollection::count() method.
<?php Using a Cursor to Get All of the DocumentsIn order to get all the documents in the collection, we will use MongoCollection::find(). The find() method returns a MongoCursor object which allows us to iterate over the set of documents that matched our query. So to query all of the documents and print them out:
<?php See AlsoThe API documentation on MongoCollection::find() contains more information about finding data. Setting Criteria for a QueryWe can create a query to pass to the MongoCollection::find() method to get a subset of the documents in our collection. For example, if we wanted to find the document for which the value of the "i" field is 71, we would do the following:
<?php and it should just print just one document: array(2) { ["_id"]=> object(MongoId)#6 (0) { } ["i"]=> int(71) ["_ns"]=> "testCollection" } Getting A Set of Documents With a QueryWe can use the query to get a set of documents from our collection. For example, if we wanted to get all documents where "i" > 50, we could write:
<?php which should print the documents where i > 50. We could also get a range, say 20 < i <= 30:
<?php Remember to always escape the $-symbol or use single quotes. Otherwise PHP will interpret it to be the variable $gt. Creating An IndexMongoDB supports indexes, and they are very easy to add on a collection. To create an index, you specify the field name and direction: ascending (1) or descending (-1). The following creates an ascending index on the "i" field:
<?php Indexing is critical for good read performance as your data grows. If you are not familiar with indexing, check out the MongoCollection::ensureIndex() documentation and the core » MongoDB indexing documentation. |
|