If its internal state is loaded than it will only updated the
            set properties but otherwise it will create a new document.

def save(self):
        """
            If its internal state is loaded than it will only updated the
            set properties but otherwise it will create a new document.
        """

        # TODO: Add option force_insert

        if not self.is_loaded and self.id is None or self.id == '':
            data = self.resource.post(data=self.data, collection=self.collection)
            self.id = data['_id']
            self.key = data['_key']
            self.revision = data['_rev']
            self.is_loaded = True
        else:
            data = self.resource(self.id).patch(data=self.data)
            self.revision = data['_rev']