File: ensureindex.xml

package info (click to toggle)
php-doc 20140201-1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 74,084 kB
  • ctags: 4,040
  • sloc: xml: 998,137; php: 20,812; cpp: 500; sh: 177; makefile: 63; awk: 28
file content (338 lines) | stat: -rw-r--r-- 10,055 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
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
<?xml version="1.0" encoding="utf-8"?>

<!-- $Revision: 330305 $ -->
<refentry xml:id="mongocollection.ensureindex" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
 <refnamediv>
  <refname>MongoCollection::ensureIndex</refname>
  <refpurpose>
   Creates an index on the given field(s), or does nothing if the index 
   already exists
  </refpurpose>
 </refnamediv>

 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis>
   <modifier>public</modifier> <type>bool</type><methodname>MongoCollection::ensureIndex</methodname>
   <methodparam><type>string|array</type><parameter>key|keys</parameter></methodparam>
   <methodparam choice="opt"><type>array</type><parameter>options</parameter><initializer>array()</initializer></methodparam>
  </methodsynopsis>
  <para>
   This method creates an index on the collection and the specified fields.
   The key specification can either be just a single field name as string, or an
   array containing one or more field names with their sort direction.
  </para>
 </refsect1>

 <refsect1 role="parameters"> 
  &reftitle.parameters; 
  <para>
   <variablelist>
    <varlistentry>
     <term>
      <parameter>keys</parameter>
     </term>
     <listitem>
      <para>
       An array of fields by which to sort the index on. Each element in the
       array has as key the field name, and as value either
       <literal>1</literal> for ascending sort, or <literal>-1</literal> for
       descending sort.
      </para>
     </listitem>
    </varlistentry>   
    <varlistentry>
     <term>
      <parameter>options</parameter>
     </term>
     <listitem>
      <para>
       This parameter is an associative array of the form 
       <literal>array("optionname" => &lt;boolean&gt;, ...)</literal>. Currently 
       supported options are: 
       <itemizedlist>
        &mongo.writes.parameters.writeconcern;
        <listitem>
         <para>
          <literal>"unique"</literal>
         </para>
         <para>
          Create a unique index.
         </para>
         <warning>
          <para>
           A unique index cannot be created on a field if multiple existing
           documents do not contain the field. The field is effectively &null;
           for these documents and thus already non-unique. Sparse indexing may
           be used to overcome this, since it will prevent documents without the
           field from being indexed.
          </para>
         </warning>
        </listitem>
        <listitem>
         <para>
          <literal>"dropDups"</literal>
         </para>
         <para>
          If a unique index is being created and duplicate values exist, drop
          all but one duplicate value.
         </para>
        </listitem>
        <listitem>
         <para>
          <literal>"sparse"</literal>
         </para>
         <para>
          Create a sparse index, which only includes documents containing the
          field. This option is only compatible with single-field indexes.
         </para>
        </listitem>
        <listitem>
         <para>
          <literal>"expireAfterSeconds"</literal>
         </para>
         <para>
          The value of this option should specify the number of seconds after
          which a document should be considered expired and automatically
          removed from the collection. This option is only compatible with
          single-field indexes where the field will contain
          <classname>MongoDate</classname> values.
         </para>
         <para>
          This feature is available in MongoDB 2.2+. See
          <link xlink:href="&url.mongodb.docs.expire_data;">Expire Data from Collections by Setting TTL</link>
          for more information.
         </para>
        </listitem>
        <listitem>
         <para>
          <literal>"background"</literal>
         </para>
         <para>
          By default, index creation is a blocking operation and will stop other
          operations on the database from proceeding until completed. If you
          specify &true; for this option, the index will be created in the
          background while other operations are taking place.
         </para>
         <warning>
          <para>
           Prior to MongoDB 2.1.0, the index build operation is not a background
           build when it replicates to secondaries, irrespective of this option.
           See
           <link xlink:href="&url.mongodb.dochub.indexes.rs;">Building Indexes with Replica Sets</link>
           for more information.
          </para>
         </warning>
        </listitem>
        <listitem>
         <para>
          <literal>"name"</literal>
         </para>
         <para>
          This option allows you to override the algorithm that the driver
          uses to create an index name and specify your own. This can be
          useful if you are indexing many keys and Mongo complains about the
          index name being too long.
         </para>
        </listitem>
        &mongo.writes.parameters.timeout;
        &mongo.writes.parameters.safe;
       </itemizedlist>
      </para>
     </listitem>
    </varlistentry>
   </variablelist>
  </para>
 </refsect1>

 <refsect1 role="returnvalues">
  &reftitle.returnvalues;
  <para>
   Returns an array containing the status of the index creation if the
   <literal>"w"</literal> option is set. Otherwise, returns &true;.
  </para>
  <para>
   Fields in the status array are described in the documentation for
   <function>MongoCollection::insert</function>.
  </para>
 </refsect1>

 <refsect1 role="changelog">
  &reftitle.changelog;
  <para>
   <informaltable>
    <tgroup cols="2">
     <thead>
      <row>
       <entry>&Version;</entry>
       <entry>&Description;</entry>
      </row>
     </thead>
     <tbody>
      <row>
       <entry>1.3.0</entry>
       <entry>
        The <parameter>options</parameter> parameter no longer accepts a boolean
        to signify a unique index. Instead, this now has to be done with
        <literal>array('unique' => true)</literal>.
       </entry>
      </row>
      <row>
       <entry>1.2.11</entry>
       <entry>
        Emits <constant>E_DEPRECATED</constant> when
        <parameter>options</parameter> is <type>scalar</type>.
       </entry>
      </row>
      <row>
       <entry>1.2.0</entry>
       <entry>Added <literal>"timeout"</literal> option.</entry>
      </row>
      <row>
       <entry>1.0.11</entry>
       <entry>
        <para>
         The <literal>"safe"</literal> option will trigger a primary failover,
         if necessary.
        </para>
        <para>
         <classname>MongoException</classname> will be thrown if the index name
         (either generated or set) is longer than 128 bytes.
        </para>
       </entry>
      </row>
      <row>
       <entry>1.0.5</entry>
       <entry>
        Added the <literal>"name"</literal> option to override index name
        creation.
       </entry>
      </row>
      <row>
       <entry>1.0.2</entry>
       <entry>
        Changed <parameter>options</parameter> parameter from boolean to array.
        Pre-1.0.2, the second parameter was an optional boolean value specifying
        a unique index.
       </entry>
      </row>
     </tbody>
    </tgroup>
   </informaltable>
  </para>
 </refsect1>

 <refsect1 role="errors">
  &reftitle.errors;
  <para>
   Throws <classname>MongoException</classname> if the index name is longer than
   128 bytes. (Version 1.0.11+)
  </para>
  &mongo.errors.exceptions.writeconcern;
 </refsect1>

 <refsect1 role="examples">
  &reftitle.examples;
  <example>
   <title><function>MongoCollection::ensureIndex</function> example</title>
   <programlisting role="php">
<![CDATA[
<?php

$c = new MongoCollection($db, 'foo');

// create an index on 'x' ascending
$c->ensureIndex('x');

// create an index on 'y' ascending
$c->ensureIndex(array('y' => 1));

// create an index on 'z' ascending and 'zz' descending
$c->ensureIndex(array('z' => 1, 'zz' => -1));

// create a unique index on 'x'
$c->ensureIndex(array('x' => 1), array("unique" => true));

?>
]]>
   </programlisting>
  </example>
  <example>
   <title>Drop duplicates example</title>
   <programlisting role="php">
<![CDATA[
<?php

$collection->insert(array("username" => "joeschmoe"));
$collection->insert(array("username" => "joeschmoe"));

/*
 * index creation fails, you can't create a unique index on a key with 
 * non-unique values
 */
$collection->ensureIndex(array("username" => 1), array("unique" => 1));

/*
 * index creation succeeds: one of the documents is removed from the collection
 */
$collection->ensureIndex(array("username" => 1), array("unique" => 1, "dropDups" => 1));

/* 
 * now we have a unique index, more inserts with the same username (such as the
 * one below) will fail
 */
$collection->insert(array("username" => "joeschmoe"));

?>
]]>
   </programlisting>
  </example>

  <example>
   <title>Geospatial Indexing</title>
   <para>
    Mongo supports geospatial indexes, which allow you to search for documents
    near a given location or within a shape.  For example, to create a 
    geospatial index on the "loc" field:
   </para>
   <programlisting role="php">
<![CDATA[
<?php

$collection->ensureIndex(array("loc" => "2d"));

?>
]]>
   </programlisting>
  </example>
 </refsect1>

 <refsect1 role="seealso">
  &reftitle.seealso;
  <para>
   MongoDB core docs on 
   <link xlink:href="&url.mongodb.dochub.indexes;">vanilla indexes</link> and 
   <link xlink:href="&url.mongodb.dochub.geo;">geospatial indexes</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
-->