MongoStore.prototype.fRead = function(s,fCallback){ if (nsTypes.fbIsArray(s)){ s = s.join('/'); } var aFilter = {}; var aQuery = {key: s}; I("MongoStore","fRead","reading", this.sCollection, aQuery, aFilter); var store = this; this.mongo.fFind( this.sCollection, aQuery, aFilter, function(err,vax){ if (err){ W("MongoStore","fRead","find error",err); } if (vax.length !== 1){ return fCallback(true); } var xOut = store.fxMongoUnClean(vax[0].val); fCallback(null,xOut); } ); };
MongoStore.prototype.fDelete = function(s,fCallback){ if (nsTypes.fbIsArray(s)){ s = s.join('/'); } var aQuery = {key: s}; I("MongoStore","fDelete","deleting", this.sCollection, aQuery); this.mongo.fRemove( this.sCollection, aQuery, {}, fCallback ); };
ns.fxGetTreePath = function(a,sPath,xDefault){ var vs = sPath.replace(']','').split(/([.\[])/); if (vs.length === 1 && vs[0] === ""){ fThrow("bad path " + sPath); } for (var n=0, c=vs.length; n<c; n+=2){ if ( !((nsTypes.fbIsObject(a)) || (nsTypes.fbIsArray(a))) || a[vs[n]] === undefined ){ return xDefault; } a=a[vs[n]]; } return a; };
MongoStore.prototype.fWrite = function(s,x,fCallback){ if (nsTypes.fbIsArray(s)){ s = s.join('/'); } x = this.fxMongoClean(x); var aQuery = {key: s}; var aUpsert = {key: s, val: x}; I("MongoStore","fWrite","writing]", this.sCollection, aQuery, aUpsert); this.mongo.fUpdate( this.sCollection, aQuery, aUpsert, {upsert:true}, fCallback ); };
var fxCopyInner = function(x, axCopyTable){ if (typeof x !== "object" || x === null || x instanceof RegExp){ return x; } if (x[sCopyMarker]){ return vxCopyTable[x[sCopyMarker]]; } if (nsTypes.fbIsArray(x)){ var v=[]; x[sCopyMarker] = vxCopyTable.length; vxCopyTable.push(v); var c=x.length; for (var n=0; n<c; n++){ v[n] = fxCopyInner(x[n], axCopyTable); } return v; } else{ try { var oCopy = nsClasses.foInsantiate(x); x[sCopyMarker] = vxCopyTable.length; vxCopyTable.push(oCopy); for (var s in x) { if(x.hasOwnProperty(s) && s !== sCopyMarker){ oCopy[s] = fxCopyInner(x[s], axCopyTable); } } return oCopy; } catch(e){ // uncopyable return {}; } } };
var fStripCopyMarker = function(x){ if (typeof (x) !== "object" || x === null) { return; } if (!x.hasOwnProperty(sCopyMarker)){ return; } delete x[sCopyMarker]; if (nsTypes.fbIsArray(x)){ for (var n=0, c=x.length; n<c; n++){ fStripCopyMarker(x[n]); } } else{ for (var s in x) { if(x.hasOwnProperty(s)){ fStripCopyMarker(x[s]); } } } };