// MapReduceOutput.java
/**
* Copyright (C) 2008 10gen Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mongodb;
/**
* Represents the result of a map/reduce operation
* @author antoine
*/
public class MapReduceOutput {
@SuppressWarnings("unchecked")
public MapReduceOutput( DBCollection from , DBObject cmd, CommandResult raw ){
_commandResult = raw;
_cmd = cmd;
if ( raw.containsField( "results" ) ) {
_coll = null;
_collname = null;
_resultSet = (Iterable<DBObject>) raw.get( "results" );
} else {
Object res = raw.get("result");
if (res instanceof String) {
_collname = (String) res;
} else {
BasicDBObject output = (BasicDBObject) res;
_collname = output.getString("collection");
_dbname = output.getString("db");
}
DB db = from._db;
if (_dbname != null) {
db = db.getSisterDB(_dbname);
}
_coll = db.getCollection( _collname );
// M/R only applies to master, make sure we dont go to slave for results
_coll.setOptions(_coll.getOptions() & ~Bytes.QUERYOPTION_SLAVEOK);
_resultSet = _coll.find();
}
_counts = (BasicDBObject)raw.get( "counts" );
}
/**
* returns a cursor to the results of the operation
* @return
*/
public Iterable<DBObject> results(){
return _resultSet;
}
/**
* drops the collection that holds the results
*/
public void drop(){
if ( _coll != null)
_coll.drop();
}
/**
* gets the collection that holds the results
* (Will return null if results are Inline)
* @return
*/
public DBCollection getOutputCollection(){
return _coll;
}
@Deprecated
public BasicDBObject getRaw(){
return _commandResult;
}
public CommandResult getCommandResult(){
return _commandResult;
}
public DBObject getCommand() {
return _cmd;
}
public ServerAddress getServerUsed() {
return _commandResult.getServerUsed();
}
public String toString(){
return _commandResult.toString();
}
final CommandResult _commandResult;
final String _collname;
String _dbname = null;
final Iterable<DBObject> _resultSet;
final DBCollection _coll;
final BasicDBObject _counts;
final DBObject _cmd;
}