public void TestNu() { //var d = DocumentExtensions.Parse("[1,2,3]"); //var d = DocumentExtensions.Parse("{\"top\":1}"); var d = DocumentExtensions.Parse("{\"objects\":[1,{\"top\":1},3]}"); string t = d.ToString(); Assert.That(d, Is.Not.Null); Assert.That(d["objects"], Is.Not.Null); }
public string Execute(string command, out int objectCount, IDocumentPrettyPrint printer) { objectCount = 0; try { _lastCollectionUsed = null; int take; string collectionName, operation, sort; string innerCommand = ParseCollectionAndOperation(command, out collectionName, out operation, out take, out sort); Document doc, sortDoc = null; switch (operation) { case "find": doc = DocumentExtensions.Parse(innerCommand); if (!string.IsNullOrEmpty(sort)) { sortDoc = DocumentExtensions.Parse(sort); } using (var db = MDB.GetMongo()) { var l = db[DataBaseName][collectionName].Find(doc, take, 0); if (sortDoc != null) { l.Sort(sortDoc); } objectCount = l.Documents.Count(); _lastCollectionUsed = collectionName; return(printer.Print(l.Documents)); } break; case "findone": doc = DocumentExtensions.Parse(innerCommand); using (var db = MDB.GetMongo()) { var l = db[DataBaseName][collectionName].FindOne(doc); objectCount = 1; _lastCollectionUsed = collectionName; return(printer.Print(l)); } break; case "update": var args = SplitIntoArguments(innerCommand); using (var db = MDB.GetMongo()) { objectCount = 0; if (args.Count == 1 && args[0] is Document) { UpdateObjectAlwaysUpsert(collectionName, args[0] as Document, db); } else if (args.Count == 2 && args[0] is Document && args[1] is Document) { db[DataBaseName][collectionName].Update(args[1] as Document, args[0] as Document); } else if (args.Count == 3 && args[0] is Document && args[1] is Document && (args[2] is double || args[2] is bool)) { int upsert = GetIntboolFromDoubleOrBool(args[2]); db[DataBaseName][collectionName].Update(args[1] as Document, args[0] as Document, upsert); } else if (args.Count == 4 && args[0] is Document && args[1] is Document && (args[2] is double || args[2] is bool) && (args[3] is double || args[3] is bool)) { int multi = GetIntboolFromDoubleOrBool(args[3]); if (multi == 1) { db[DataBaseName][collectionName].UpdateAll(args[1] as Document, args[0] as Document); } else { int upsert = GetIntboolFromDoubleOrBool(args[2]); db[DataBaseName][collectionName].Update(args[1] as Document, args[0] as Document, upsert); } } else { return("Syntax update(doc) or update(sel, doc, [upsert 1 or 0, [multi 1 or 0]])"); } return("Sent update command"); } break; case "eval": string function; List <object> oargs; if (!SplitIntoFunctionAndArguments(innerCommand, out function, out oargs)) { return("Parse error"); } using (var db = MDB.GetMongo()) { if (oargs != null && oargs.Count > 0) { doc = DocumentExtensions.Eval(function, oargs.ToArray()); } else { doc = DocumentExtensions.Eval(function); } var retVal = db[DataBaseName].SendCommand(doc); return(printer.Print(retVal)); } break; case "count": doc = DocumentExtensions.Parse(innerCommand); using (var db = MDB.GetMongo()) { long count; if (doc != null) { count = db[DataBaseName][collectionName].Count(doc); } else { count = db[DataBaseName][collectionName].Count(); } return("Count " + count); } break; case "delete": doc = DocumentExtensions.Parse(innerCommand); using (var db = MDB.GetMongo()) { if (doc != null) { db[DataBaseName][collectionName].Delete(doc); } return("Sent delete command"); } break; default: return("Unknown operation '" + operation + "'"); break; } } catch (MongoCommandException e) { return(e.Error.ToString()); } catch (Exception e) { return(e.Message); } }