in stack/mongo-emulator/src/main/java/org/apache/usergrid/mongo/query/MongoQueryParser.java [62:137]
public static Query toNativeQuery( BSONObject query, BSONObject fieldSelector, int numberToReturn ) {
// TODO overload? or add?
if ( query == null ) {
return null;
}
BasicBSONObject query_expression = null;
BasicBSONObject field_selector = null;
BasicBSONObject sort_order = null;
Object o = query.get( "$query" );
if ( !( o instanceof BasicBSONObject ) ) {
o = query.get( "query" );
}
if ( o instanceof BasicBSONObject ) {
query_expression = ( BasicBSONObject ) o;
}
o = query.get( "$orderby" );
if ( !( o instanceof BasicBSONObject ) ) {
o = query.get( "orderby" );
}
if ( o instanceof BasicBSONObject ) {
sort_order = ( BasicBSONObject ) o;
}
if ( ( query_expression == null ) && ( query instanceof BasicBSONObject ) ) {
query_expression = ( BasicBSONObject ) query;
query_expression.removeField( "$orderby" );
query_expression.removeField( "$max" );
query_expression.removeField( "$min" );
}
if ( ( query_expression == null ) && ( sort_order == null ) ) {
return null;
}
if ( query_expression.size() == 0 && sort_order != null ) {
if ( sort_order.size() == 0 ) {
return null;
}
if ( ( sort_order.size() == 1 ) && sort_order.containsField( "_id" ) ) {
return null;
}
}
Query q = new Query();
if ( numberToReturn > 0 ) {
q.setLimit( numberToReturn );
}
if ( query_expression != null ) {
Operand root = eval( query_expression );
q.setRootOperand( root );
}
if ( fieldSelector != null ) {
for ( String field : fieldSelector.keySet() ) {
q.addSelect( field, field );
}
}
if ( sort_order != null ) {
for ( String sort : sort_order.keySet() ) {
if ( !"_id".equals( sort ) ) {
int s = getIntValue( sort_order.toMap(), "_id", 1 );
q.addSort( sort, s >= 0 ? SortDirection.ASCENDING : SortDirection.DESCENDING );
}
}
}
return q;
}