def testSingleIndex(self): """Test case - create collection, create simple single index, insert document list, read check documents""" try: with Connection(cfgOb=self.__cfgOb, resourceName=self.__resourceName) as client: nDocs = 100 mg = MongoDbUtil(client) ok = mg.createCollection(self.__dbName, self.__collectionName) self.assertTrue(ok) ok = mg.databaseExists(self.__dbName) self.assertTrue(ok) ok = mg.collectionExists(self.__dbName, self.__collectionName) self.assertTrue(ok) # # Create before insert ok = mg.createIndex(self.__dbName, self.__collectionName, keyList=["DOC_ID"], indexName="primary", indexType="DESCENDING", uniqueFlag=True) self.assertTrue(ok) dList = [] for ii in range(nDocs): dObj = self.__makeDataObj(2, 5, 5, ii) dList.append(dObj) # keyName = "DOC_ID" rIdL = mg.insertList(self.__dbName, self.__collectionName, dList, keyNames=[keyName], salvage=True) self.assertEqual(len(dList), len(rIdL)) # for ii in range(nDocs): kVal = "DOC_%d" % ii rObj = mg.fetchOne(self.__dbName, self.__collectionName, "DOC_ID", kVal) # logger.debug("Return Object %s" % pprint.pformat(rObj)) rObj.pop("_id", None) dList[ii].pop("_id", None) self.assertEqual(len(dList[ii]), len(rObj)) self.assertEqual(dList[ii], rObj) # ok = mg.dropIndex(self.__dbName, self.__collectionName, indexName="primary") self.assertTrue(ok) ok = mg.createIndex(self.__dbName, self.__collectionName, keyList=["DOC_ID"], indexName="primary", indexType="DESCENDING", uniqueFlag=True) self.assertTrue(ok) ok = mg.reIndex(self.__dbName, self.__collectionName) self.assertTrue(ok) except Exception as e: logger.exception("Failing with %s", str(e)) self.fail()
def createCollection(self, databaseName, collectionName, indexAttributeNames=None, indexName="primary", checkExists=False, bsonSchema=None): """Create collection and optionally set index attributes for the named index and validation schema for a new collection. Args: databaseName (str): target database name collectionName (str): target collection name indexAttributeNames (list, optional): list of attribute names for the 'primary' index. Defaults to None. checkExists (bool, optional): reuse an existing collection if True. Defaults to False. bsonSchema (object, optional): BSON compatable validation schema. Defaults to None. Returns: (bool): True for success or False otherwise """ try: logger.debug("Create database %s collection %s", databaseName, collectionName) with Connection(cfgOb=self.__cfgOb, resourceName=self.__resourceName) as client: mg = MongoDbUtil(client) if checkExists and mg.databaseExists( databaseName) and mg.collectionExists( databaseName, collectionName): ok1 = True else: ok1 = mg.createCollection(databaseName, collectionName, bsonSchema=bsonSchema) ok2 = mg.databaseExists(databaseName) ok3 = mg.collectionExists(databaseName, collectionName) okI = True if indexAttributeNames: okI = mg.createIndex(databaseName, collectionName, indexAttributeNames, indexName=indexName, indexType="DESCENDING", uniqueFlag=False) return ok1 and ok2 and ok3 and okI # except Exception as e: logger.exception("Failing with %s", str(e)) return False
def __createCollection(self, dbName, collectionName, indexAttributeNames=None, checkExists=False, bsonSchema=None): """Create database and collection and optionally a primary index - """ try: logger.debug("Create database %s collection %s", dbName, collectionName) with Connection(cfgOb=self.__cfgOb, resourceName=self.__resourceName) as client: mg = MongoDbUtil(client) if checkExists and mg.databaseExists( dbName) and mg.collectionExists( dbName, collectionName): ok1 = True else: ok1 = mg.createCollection(dbName, collectionName, bsonSchema=bsonSchema) ok2 = mg.databaseExists(dbName) ok3 = mg.collectionExists(dbName, collectionName) okI = True if indexAttributeNames: okI = mg.createIndex(dbName, collectionName, indexAttributeNames, indexName="primary", indexType="DESCENDING", uniqueFlag=False) return ok1 and ok2 and ok3 and okI # except Exception as e: logger.exception("Failing with %s", str(e)) return False
def testSingleIndexSelect(self): """Test case - create collection, create simple single index, insert document list, read check documents.""" try: logger.debug("Starting testSingleIndexSelect") with Connection(cfgOb=self.__cfgOb, resourceName=self.__resourceName) as client: nDocs = 100 mg = MongoDbUtil(client) ok = mg.createCollection(self.__dbName, self.__collectionName) self.assertTrue(ok) ok = mg.databaseExists(self.__dbName) self.assertTrue(ok) ok = mg.collectionExists(self.__dbName, self.__collectionName) self.assertTrue(ok) # # Create before insert ok = mg.createIndex(self.__dbName, self.__collectionName, keyList=["DOC_ID"], indexName="primary", indexType="DESCENDING", uniqueFlag=True) self.assertTrue(ok) dList = [] nRows = 5 for ii in range(nDocs): dObj = self.__makeDataObj(2, 5, nRows, ii) dList.append(dObj) # keyName = "DOC_ID" rIdL = mg.insertList(self.__dbName, self.__collectionName, dList, keyNames=[keyName], salvage=True) self.assertEqual(len(dList), len(rIdL)) # for ii in range(nDocs): kVal = "DOC_%d" % ii rObj = mg.fetchOne(self.__dbName, self.__collectionName, "DOC_ID", kVal) # logger.debug("Return Object %s" % pprint.pformat(rObj)) rObj.pop("_id", None) dList[ii].pop("_id", None) self.assertEqual(len(dList[ii]), len(rObj)) self.assertEqual(dList[ii], rObj) # ok = mg.dropIndex(self.__dbName, self.__collectionName, indexName="primary") self.assertTrue(ok) ok = mg.createIndex(self.__dbName, self.__collectionName, keyList=["DOC_ID"], indexName="primary", indexType="DESCENDING", uniqueFlag=True) self.assertTrue(ok) ok = mg.reIndex(self.__dbName, self.__collectionName) self.assertTrue(ok) # with Connection(cfgOb=self.__cfgOb, resourceName=self.__resourceName) as client: mg = MongoDbUtil(client) ii = mg.count(self.__dbName, self.__collectionName) logger.debug("collection length %d", ii) # dList = mg.fetch(self.__dbName, self.__collectionName, ["DOC_ID"]) self.assertEqual(len(dList), nDocs) logger.debug("Fetch length %d", len(dList)) for ii, dD in enumerate(dList): logger.debug("Fetch num %d: %r", ii, dD) # dList = mg.fetch(self.__dbName, self.__collectionName, ["category_0.attribute_0"], queryD={"category_0.attribute_0": "val_0_0"}) self.assertEqual(len(dList), nDocs) logger.debug("Fetch length %d", len(dList)) for ii, dD in enumerate(dList): logger.debug("Fetch num %d: %r", ii, dD) atName = "category_0.attribute_0" vL0 = mg.distinct(self.__dbName, self.__collectionName, atName) self.assertEqual(len(vL0), nRows + 2) logger.debug("vL0 %r", vL0) vL1 = mg.distinct(self.__dbName, self.__collectionName, "category_1.attribute_0") self.assertEqual(len(vL1), nRows + 2) for v in vL0: num = mg.count(self.__dbName, self.__collectionName, countFilter={atName: v}) logger.debug("%s value %s (%d)", atName, v, num) self.assertGreaterEqual(num, 100) # except Exception as e: logger.exception("Failing with %s", str(e)) self.fail()