var mapper = new BsonJavaScript(@"function()
|
{
|
for (var columns in this)
|
{
|
if (!this[columns] || Object.prototype.toString.call(this[columns]) == '[object BSON]')
|
getNestedColumns(columns, this[columns]);
|
else
|
emit(columns, this[columns]);
|
}
|
function getNestedColumns(rootColumn, embeddedDocument)
|
{
|
try
|
{
|
for (var nestedColumn in embeddedDocument)
|
{
|
var columnName = rootColumn + '__' + nestedColumn;
|
if (!embeddedDocument[nestedColumn] && [typeof embeddedDocument[nestedColumn]].toString() == 'object' && embeddedDocument[nestedColumn] != '[object BSON]')
|
{
|
emit(columnName, embeddedDocument[nestedColumn]);
|
}
|
else if (!embeddedDocument[nestedColumn] && isObject(embeddedDocument[nestedColumn]))
|
{
|
getNestedColumns(columnName, embeddedDocument[nestedColumn]);
|
}
|
else
|
{
|
emit(columnName, embeddedDocument[nestedColumn]);
|
}
|
}
|
}
|
catch (error)
|
{}
|
}
|
}");
|
|
var reducer = new BsonJavaScript(@"function(key, value)
|
{
|
if (value[0] != null)
|
{
|
var integerValue = TryParseInt(value[0].toString(), null);
|
if (integerValue !== null)
|
return integerValue;
|
var floatValue = TryParseFloat(value[0].toString(), null);
|
if (floatValue !== null)
|
return floatValue;
|
var dateTimeValue = TryParseDateTime(value[0].toString(), null);
|
if (dateTimeValue !== null)
|
return dateTimeValue;
|
var booleanValue = TryParseBoolean(value[0].toString(), null);
|
if (booleanValue !== null)
|
return booleanValue;
|
return value[0].toString();
|
}
|
else
|
return '';
|
}function TryParseInt(str, defaultValue)
|
{
|
var retValue = defaultValue;
|
if (str !== null)
|
{
|
if (str.length > 0)
|
{
|
if (!isNaN(str))
|
{
|
retValue = parseInt(str);
|
}
|
}
|
}
|
return retValue;
|
}function TryParseFloat(str, defaultValue)
|
{
|
var retValue = defaultValue;
|
if (str !== null)
|
{
|
if (str.length > 0)
|
{
|
if (!isNaN(str))
|
{
|
retValue = parseFloat(str);
|
}
|
}
|
}
|
return retValue;
|
}function TryParseDateTime(str, defaultValue)
|
{
|
var retValue = defaultValue;
|
if (str !== null)
|
{
|
if (str.length > 0)
|
{
|
var d = new Date(str);
|
if (d != 'Invalid Date')
|
return d;
|
else
|
return null;
|
}
|
}
|
return retValue;
|
}function TryParseBoolean(str, defaultValue)
|
{
|
var retValue = defaultValue;
|
if (str !== null)
|
{
|
if (str.length > 0)
|
{
|
switch (str)
|
{
|
case true:
|
case 'true':
|
return true;
|
case 'false':
|
case false:
|
return false;
|
default:
|
return null;
|
}
|
}
|
}
|
return retValue;
|
}");
|