Hi If I create my own object/field I would loose the possibility for standalone attachments. I will not be able to update attachments without also updating the document holding the attachments.
On 29 December 2010 18:42, Robert Newson <[email protected]> wrote: > The _attachments object is reserved for CouchDB internal usage and > does not permit extra fields. Use a custom object of your own with the > same keys; > > { > "_attachments" : { "foo" : { ... whatever ... }}, > "attachments":" {"foo": { "type":"invoice" }} > } > > then attachments["foo"] == "invoice". > > B. > > On Wed, Dec 29, 2010 at 5:38 PM, Svein Helge Grinden > <[email protected]> wrote: > > Hi > > > > I was wondering if there is possible to add a custom field to an > attachment. > > > > Scenario: > > I have documents with attachments of different types(invoice, contract, > > confirmation etc.). > > Example: > > > > { > > "_id": "5fdf72a5c03d4b3f89f55e63db002126", > > "_rev": "3-ec0d8a43dbd068be752b0528f1a199e7", > > "type": "order", > > "customerid": "123", > > "orderid": "0001", > > "_attachments": { > > > > "doc1.txt": { > > "content_type": "text/plain", > > "revpos": 2, > > "length": 10134, > > "stub": true > > }, > > "doc2.txt": { > > > > "content_type": "text/plain", > > "revpos": 2, > > "length": 10134, > > "stub": true > > } > > > > } > > > > Then I would want to list documents by type for a specific order. > > > > 1. My first approach was this: > > > > function(doc) { > > var invoice = "invoice_"; > > if (doc._attachments) { > > for (var i in doc._attachments) > > { > > if(i.substring(invoice.length, 0) == invoice) > > { > > emit(doc.orderid, doc); > > } > > } > > } > > } > > > > The solution above would demand that I name every attachment in > > a specific way with the type as the first part of the name. > > > > 2. My second approach was to store every attachments as "normal documents > > and connect them by key. That would mean having orderid on every > attachment. > > > > function(doc) { > > if (doc.type == "invoice") > > { > > emit(doc.orderid, doc); > > } > > } > > > > This approach would be more RDBMS like. > > > > 3. What I was hoping was possible was to have my own custom field on the > > attachments so the view would look like this. > > > > function(doc) { > > if (doc._attachments) { > > for (var i in doc._attachments) > > { > > if(i.type == "invoice") > > { > > emit(doc.orderid, doc); > > } > > } > > } > > } > > > > I have tried to add custom fields to an attachment by they are removed on > > save. > > > > > > I would like to hear your opinion about the different approaches and what > > you would do to solve this scenario. > > > > Regards, > > Svein Helge > > >
