File: command.xml

package info (click to toggle)
php-doc 20100521-2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze, wheezy
  • size: 59,992 kB
  • ctags: 4,085
  • sloc: xml: 796,833; php: 21,338; cpp: 500; sh: 117; makefile: 58; awk: 28
file content (187 lines) | stat: -rw-r--r-- 5,052 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
<?xml version="1.0" encoding="utf-8"?>

<!-- $Revision: 296627 $ -->
<refentry xml:id="mongodb.command" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
 <refnamediv>
  <refname>MongoDB::command</refname>
  <refpurpose>Execute a database command</refpurpose>
 </refnamediv>
 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis>
   <modifier>public</modifier> <type>array</type><methodname>MongoDB::command</methodname>
   <methodparam><type>array</type><parameter>data</parameter></methodparam>
  </methodsynopsis>
  <para>
   Almost everything that is not a CRUD operation can be done with a database command.
   Need to know the database version?  There's a command for that.  Need to do aggregation?
   There's a command for that.  Need to turn up logging?  You get the idea.
  </para>
  <para>
   This method is identical to the function:
   <programlisting role="php">
<![CDATA[
<?php

public function command($data) {
    return $this->selectCollection('$cmd')->findOne($data);
}

?>
]]>
   </programlisting>
  </para>
 </refsect1>
 <refsect1 role="parameters">
  &reftitle.parameters;
  <para>
   <variablelist>
    <varlistentry>
     <term>
      <parameter>data</parameter>
     </term>
     <listitem>
      <para>
       The query to send.
      </para>
     </listitem>
    </varlistentry>   
   </variablelist>
  </para>
 </refsect1>
 <refsect1 role="returnvalues">
  &reftitle.returnvalues;  
  <para>
   Returns database response.
  </para>
 </refsect1>
 <refsect1 role="examples">
  &reftitle.examples;
  <example>
   <title><function>MongoDB::command</function> "distinct" example</title>
   <para>
    Finding all of the distinct values for a key.
   </para>
   <programlisting role="php">
<![CDATA[
<?php

$people = $db->people;

$people->insert(array("name" => "Joe", "age" => 4));
$people->insert(array("name" => "Sally", "age" => 22));
$people->insert(array("name" => "Dave", "age" => 22));
$people->insert(array("name" => "Molly", "age" => 87));

$ages = $db->command(array("distinct" => "people", "key" => "age"));

foreach ($ages['values'] as $age) {
    echo "$age\n";
}

?>
]]>
   </programlisting>
   &example.outputs.similar;
   <screen>
4
22
87
   </screen>
  </example>
  <example>
   <title><function>MongoDB::command</function> MapReduce example</title>
   <para>
    Get all users with at least on "sale" event, and how many times each
    of these users has had a sale.
   </para>
   <programlisting role="php">
<![CDATA[
<?php

// sample event document
$events->insert(array("user_id" => $id, 
    "type" => $type, 
    "time" => new MongoDate(), 
    "desc" => $description));

// construct map and reduce functions
$map = new MongoCode("function() { emit(this.user_id,1); }");
$reduce = new MongoCode("function(k, vals) { ".
    "var sum = 0;".
    "for (var i in vals) {".
        "sum += vals[i];". 
    "}".
    "return sum; }");

$sales = $db->command(array(
    "mapreduce" => "events", 
    "map" => $map,
    "reduce" => $reduce,
    "query" => array("type" => "sale")));

$users = $db->selectCollection($sales['result'])->find();

foreach ($users as $user) {
    echo "{$user['_id']} had {$user['value']} sale(s).\n";
}

?>
]]>
   </programlisting>
   &example.outputs.similar;
   <screen>
User 47cc67093475061e3d9536d2 had 3 sale(s).
User 49902cde5162504500b45c2c had 14 sale(s).
User 4af467e4fd543cce7b0ea8e2 had 1 sale(s).
   </screen>
   <note>
    <title>Using <classname>MongoCode</classname></title>
    <para>
     This example uses <classname>MongoCode</classname>, which can also take a 
     scope argument.  However, at the moment, MongoDB does not support using
     scopes in MapReduce.  If you would like to use client-side variables in the
     MapReduce functions, you can add them to the global scope by using the 
     optional scope field with the database command.  See 
     <link xlink:href="&url.mongodb.dochub.mapreduce;">MapReduce</link> for more
     information.
    </para>
   </note>
   <para>
    If you are going to be using MapReduce, Prajwal Tuladhar created an API for 
    Mongo PHP users which provides a nicer interface than the bare command.  You
    can download it from
    <link xlink:href="&url.mongodb.mapreduceapi;">Github</link>
    and there is a 
    <link xlink:href="&url.mongodb.mapreduceapi.blog;">blog post</link> 
    on how to use it.
   </para>
  </example>
 </refsect1>

 <refsect1 role="seealso">
  &reftitle.seealso;
  <para>
   MongoDB core docs on <link xlink:href="&url.mongodb.dochub.commands;">database commands</link>.
  </para>
 </refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->