public void Analyze_Collection_Count() { var zip = DataGen.Zip().Take(100).ToArray(); using (var db = new LiteDatabase(new MemoryStream())) { var col = db.GetCollection <Zip>(); // init zip collection with 100 document col.Insert(zip); col.EnsureIndex(x => x.City); col.EnsureIndex(x => x.Loc); var indexes = db.GetCollection("$indexes").FindAll() .ToDictionary(x => x["name"].AsString, x => x, StringComparer.OrdinalIgnoreCase); // testing for just-created indexes (always be zero) Assert.AreEqual(0, indexes["_id"]["keyCount"].AsInt32); Assert.AreEqual(0, indexes["_id"]["uniqueKeyCount"].AsInt32); Assert.AreEqual(0, indexes["city"]["uniqueKeyCount"].AsInt32); Assert.AreEqual(0, indexes["loc"]["uniqueKeyCount"].AsInt32); // but indexes created after data exists will count Assert.AreEqual(100, indexes["city"]["keyCount"].AsInt32); Assert.AreEqual(200, indexes["loc"]["keyCount"].AsInt32); db.Analyze("zip"); indexes = db.GetCollection("$indexes").FindAll() .ToDictionary(x => x["name"].AsString, x => x, StringComparer.OrdinalIgnoreCase); // count unique values var uniqueCity = new HashSet <string>(zip.Select(x => x.City)); var uniqueLoc = new HashSet <double>(zip.Select(x => x.Loc[0]).Union(zip.Select(x => x.Loc[1]))); Assert.AreEqual(zip.Length, indexes["_id"]["keyCount"].AsInt32); Assert.AreEqual(zip.Length, indexes["_id"]["uniqueKeyCount"].AsInt32); Assert.AreEqual(zip.Length, indexes["city"]["keyCount"].AsInt32); Assert.AreEqual(uniqueCity.Count, indexes["city"]["uniqueKeyCount"].AsInt32); Assert.AreEqual(zip.Length * 2, indexes["loc"]["keyCount"].AsInt32); Assert.AreEqual(uniqueLoc.Count, indexes["loc"]["uniqueKeyCount"].AsInt32); } }