return doc (not save) if no callback is provided