1 /* 2 * #%L 3 * Index.java - mongodb-async-driver - Allanbank Consulting, Inc. 4 * %% 5 * Copyright (C) 2011 - 2014 Allanbank Consulting, Inc. 6 * %% 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * #L% 19 */ 20 21 package com.allanbank.mongodb.builder; 22 23 import com.allanbank.mongodb.bson.element.IntegerElement; 24 import com.allanbank.mongodb.bson.element.StringElement; 25 26 /** 27 * Provides the ability to easily specify the index type of a field within an 28 * index specification. 29 * 30 * @api.yes This class is part of the driver's API. Public and protected members 31 * will be deprecated for at least 1 non-bugfix release (version 32 * numbers are <major>.<minor>.<bugfix>) before being 33 * removed or modified. 34 * @copyright 2012-2013, Allanbank Consulting, Inc., All Rights Reserved 35 */ 36 public final class Index { 37 38 /** The value to indicate an ascending index order. */ 39 public static final int ASCENDING = Sort.ASCENDING; 40 41 /** The value to indicate an descending index order. */ 42 public static final int DESCENDING = Sort.DESCENDING; 43 44 /** The value for the {@value} index. */ 45 public static final String GEO_2D_INDEX_NAME = "2d"; 46 47 /** The value for the {@value} index. */ 48 public static final String GEO_2DSPHERE_INDEX_NAME = "2dsphere"; 49 50 /** The value for the {@value} index. */ 51 public static final String GEO_HAYSTACK_INDEX_NAME = "geoHaystack"; 52 53 /** The value for the {@value} index. */ 54 public static final String HASHED_INDEX_NAME = "hashed"; 55 56 /** The value for the {@value} index. */ 57 public static final String TEXT_INDEX_NAME = "text"; 58 59 /** 60 * Creates an ascending order specification, e.g., 61 * <tt>{ <field> : 1 }</tt>. 62 * <p> 63 * This method is equivalent to {@link Sort#asc(String)} method. 64 * </p> 65 * 66 * @param field 67 * The field to create the ascending index on. 68 * @return The ascending sort specification. 69 */ 70 public static IntegerElement asc(final String field) { 71 return Sort.asc(field); 72 } 73 74 /** 75 * Creates an descending order specification, e.g., 76 * <tt>{ <field> : -1 }</tt>. 77 * <p> 78 * This method is equivalent to the {@link Sort#desc(String)} method. 79 * </p> 80 * 81 * @param field 82 * The field to create the descending index on. 83 * @return The descending sort specification. 84 */ 85 public static IntegerElement desc(final String field) { 86 return Sort.desc(field); 87 } 88 89 /** 90 * Creates an 2D index specification, e.g., 91 * <tt>{ <field> : "2d" }</tt>. 92 * 93 * @param field 94 * The field to create the '2d' index on. 95 * @return The 2D index specification. 96 */ 97 public static StringElement geo2d(final String field) { 98 return new StringElement(field, GEO_2D_INDEX_NAME); 99 } 100 101 /** 102 * Creates an 2D Sphere index specification, e.g., 103 * <tt>{ <field> : "2dsphere" }</tt>. 104 * 105 * @param field 106 * The field to create the '2dsphere' index on. 107 * @return The 2D Sphere index specification. 108 * @since MongoDB 2.4 109 */ 110 public static StringElement geo2dSphere(final String field) { 111 return new StringElement(field, GEO_2DSPHERE_INDEX_NAME); 112 } 113 114 /** 115 * Creates a haystack index specification, e.g., 116 * <tt>{ <field> : "geoHaystack" }</tt>. 117 * 118 * @param field 119 * The field to create the 'geoHaystack' index on. 120 * @return The 2D Sphere index specification. 121 * @see <a 122 * href="http://docs.mongodb.org/manual/applications/geohaystack/">Haystack 123 * Index Documentation</a> 124 */ 125 public static StringElement geoHaystack(final String field) { 126 return new StringElement(field, GEO_HAYSTACK_INDEX_NAME); 127 } 128 129 /** 130 * Creates an 'hashed' index specification, e.g., 131 * <tt>{ <field> : "hashed" }</tt>. 132 * 133 * @param field 134 * The field to create the 'hashed' index on. 135 * @return The 'hashed' index specification. 136 * @since MongoDB 2.4 137 */ 138 public static StringElement hashed(final String field) { 139 return new StringElement(field, HASHED_INDEX_NAME); 140 } 141 142 /** 143 * Creates an 'text' index specification, e.g., 144 * <tt>{ <field> : "text" }</tt>. 145 * <p> 146 * <b>Note:</b> MongoDB Inc. considers text indexes to be an experimental 147 * feature in the 2.4 release. Use with <b>extreme</b> caution. At a minimum 148 * make sure you have read the <a 149 * href="http://docs.mongodb.org/manual/release-notes/2.4/#text-indexes" 150 * >MongoDB Text Index Documentation</a>. 151 * </p> 152 * 153 * @param field 154 * The field to create the 'text' index on. 155 * @return The 'text' index specification. 156 * @since MongoDB 2.4 157 * @see <a 158 * href="http://docs.mongodb.org/manual/release-notes/2.4/#text-indexes">MongoDB 159 * Text Index Documentation</a> 160 */ 161 public static StringElement text(final String field) { 162 return new StringElement(field, TEXT_INDEX_NAME); 163 } 164 165 /** 166 * Creates a new Sort. 167 */ 168 private Index() { 169 super(); 170 } 171 }