public object GenerateId(object container, object document)
        {
            if (!(container is IMongoCollection <UintKeyTracker> mc))
            {
                throw new ArgumentException("container must be a mongo collection");
            }

            string mcName = mc.CollectionNamespace.FullName;
            var    filter = Builders <UintKeyTracker> .Filter.Exists(t => t.CollectionName == mcName);

            Monitor.Enter(Lock);
            var keyTracker = _uintKeyTracker.Find(filter).FirstOrDefault();

            if (keyTracker != null)
            {
                keyTracker.LastKey++;
                _uintKeyTracker.ReplaceOne(filter, keyTracker);
            }
            else
            {
                keyTracker = new UintKeyTracker {
                    CollectionName = mc.CollectionNamespace.CollectionName, LastKey = 1
                };
                _uintKeyTracker.InsertOne(keyTracker);
            }
            Monitor.Exit(Lock);

            return(keyTracker.LastKey);
        }
        public object GenerateId(object container, object document)
        {
            var mc = container as MongoCollection;

            if (mc == null)
            {
                throw new ArgumentException("container must be a mongo collection");
            }

            UintKeyTracker keyTracker = null;

            Monitor.Enter(Lock);
            keyTracker = _uintKeyTracker.FindOneByIdAs <UintKeyTracker>(mc.Name);
            if (keyTracker != null)
            {
                keyTracker.LastKey++;
            }
            else
            {
                keyTracker = new UintKeyTracker {
                    CollectionName = mc.Name, LastKey = 1
                };
            }
            _uintKeyTracker.Save(keyTracker);
            Monitor.Exit(Lock);

            return(keyTracker.LastKey);
        }