ostafen/clover

Support struct in Save() method

joyhope opened this issue · 7 comments

As I understand the clover gives a way, to add any struct object to the collection, through NewDocumentOf. It converts the struct to a map struct. It is very easy to use.

But I am unable to use this object to make updates and deletes. If I want to do this, I had to let the collection find the object, and then use the document.Set(..) to make an update.

I think there is a way to add _id to the structure or require the struct with "_id', so the structure is clover supported structure. And then find and update is easy to process.

What is exactly your question?

  1. whether my understanding is correct. The structure is unable to make direct update by db, must use querey to find the document for the structure object, and then update and delete is possible.
  2. Whether user add _id to such the customer structure will solved the problem. The clover db api could adjusted to the customer structure object is easy to use.

Yes, your understanding is correct. I think the Save() method could be updated to take an any object instead of a document to achieve what you suggest, but currently, you have to do as you said.
Let me know if you would like to work on that

I really like to have such a feature. It could be used easily. The user just defines Clover-supported structure, and such structure obj could be directly used by the DB.

Otherwise, the usage is a little awkward.

  1. Update memory structure object.
  2. Map the object to the document.
  3. Update the document
  4. Db save the document object.
    At least, the structure object and documents are the same meaning, but with different forms.

You can work on it, If you like. Unfortunately, I don't have the time to work on this, currently

@joyhope As I understand it, are you hope to have an ORM?

As per my understanding, the Save() method should take an x parameter of any type instead of a Document object.
Then, if x is already a Document, it just uses that one, otherwise we call NewDocumentOf() and attempt to create a new document from the passed object