do you know how to delete 1 of 2 attachements of Cloudant Document?
Here's how my doc looks like
Whilst you have two attachments you actually only have one document stored in Cloudant. To delete just the attachment you will need to update the cloudant doc rather than delete it.
You'll need to write some code in your application to remove the attachment from the JSON then send a PUT request to your cloudant db including the ID and the latest _rev value. (API Reference)
Alternatively you could store two documents in your database; one for each attachment. You'd then need to store the user_id and any other metadata in each. This would allow you to delete each document individually.
Related
I'm currently working on an application where users can create groups and invite others in it.
I would like people in the same group to be able to see their first and last names.
To do that, I have a collection named Users where each of the users have a document contains all their personnal data, like first and last names, phone, position , ...
I have also another collection named Groups, where all of my groups are stored, with their name, and an array contaning the ID of the members.
When an user open the app, a first request is done for request his groups (he recieve the groups names and the arrays of members). After, if he want to know the user in a certain group, another request is done for search only the first and last name of all the members.
So, I imagine that there is a query that will return me only the fields that I would like to retrieve, and that there is a rule allowing a potential hacker to be refused access to the entire user document except if the user is the owner of the document.
// For retrieving my user's groups
Stream<List<Group>?> get organizations {
return firestore
.collection('Groups')
.where('members', arrayContains: this.uid)
.snapshots()
.map(_groupsFromSnapshot);
}
// For retrieving names of the members of a group
Stream<List<Member>?> getMembers(Group group){
return firestore
.collection('Users')
// and i dont know what to do here ...
}
With the Client SDKs and the Flutter plugin it is not possible to get only a subset of the fields of a Document. When you fetch a Document you get it with all its fields.
If you want to get only a subset of the fields of a document, you can implements the two following approaches:
Denormalize your data: You create another collection which contains documents that only contain the fields you want to expose. You need to synchronize the two collections (the Users collection, which is the "master", and the new collection): for that it's quite common to use a Cloud Function. Note also that it's a good idea to use the same documentID for the linked documents in the two collections.
Use the Firestore REST API to fetch the data: With the REST API you can use a DocumentMask when you fetch one document with the get method or a Projection when you query a Collection. The DocumentMask or the Projection will "restrict a get operation on a document to a subset of its fields". You can use the http package for calling the API from your Flutter app.
HOWEVER, the second approach is not valid if you want to protect the other users data: a malicious user could call the Firestore REST API with the same request but without a DocumentMask or a Projection. In other words, this approach is interesting if you just want to minimize the network traffic, not if you want to keep secret certain fields of a document.
So, for your specific use case, you need to go for the first solution.
Problem: Getting a list of documents that exist in a specific folder
Tried solution:
endpoint /api/v4/folders/list.json seems to be working exactly the same as /api/v4/folders.json
Something similar to this - similar endpoint doesn't seem to exist
Filtering documents by parent_id, however this functionality doesn't exist
Is there some kind of example of the endpoint to perform such operation?
Reading the documentation, it appears as though /api/v4/folders/list.json returns the contents of a folder. If you are trying to get a list of all the documents within the folder 1425540709 (using your example above) then your GET would add a parameter "parent_id = 1425540709". According to the documentation, if you don't send a "parent_id" it defaults to the root folder for the account.
Your request url should look like this I believe:
https://app.goclio.com/api/v4/folders/list.json?parent_id=1425540709&limit=25
The response will be a json array of the items within that folder.
Make sure you send it a parameter for what fields you want back too because otherwise the api defaults to just id and etag.
I am using FromCache() method whenever I need to retrieve data from the SQL database. There will be a lot of unique queries executed in a single method since it is getting data based on userID. The data associated with the userID will be updated through a separate process which will also trigger an event in the method that controls retrieving. When the data for a specific user is updated, I want to expire the cache for that user so that the next query on that userID will get the most recent data.
I see that EF plus has the option to ExpireTag. Would it be feasible to create a single tag for each userID and then use that to expire the cache?
Would it be feasible to create a single tag for each userID and then use that to expire the cache?
Yes, tag can be used similarly as if you use a cache key.
The best is probably using 2 tags:
Users
[UniqueUserId]
The Users tag will expire all cache related to "users"
The [UniqueUserId] tag will expire all caches related to this specific users
We need to retrieve an ID that uniquely identifies a document, so that when a user opens the same document in different sessions (even a year apart) we can identify this in the logs.
In the API I found DocumentURL but this could change (if the document is moved?) and it might even be empty (if the document is never stored online?). We could hash a combination of properties like Author and Date Created but these too can change and thus can't be fully relied upon.
How do we access the ID of a document? Ideally we're looking for a solution that works for any type of document, but if currently there is only such a property for a Word document then that is sufficient as well.
EDIT: Adding scenarios that need to work because otherwise my request seems too simple (hence the down-votes?):
The user can open, edit, save, etc. other documents and the ID should ALWAYS be the same PER document. Similarly, if a user shares a document with someone else, the ID read by the other user (when running our add-in) should be the same as for the owner of that document.
The add-in needs to be portable and usable on multiple platforms. When a user opens the same document on Word Online and Win 32, on different computers, etc. the ID must always be the same for that document.
To create a unique ID, it takes only a little JavaScript to create a GUID. See this SO post for example: Create GUID/UUID in JavaScript
To store the ID, you could use a custom setting or custom property. See Persist State and Settings
Suppose I have a Mongo collection and a web application to view the collection in the Internet. When I edit the collection (i.e. add, delete, and update the documents) my changes are instantly available in the Internet.
Now I would like to save all my changes as a draft and when I want to make it available I will publish the draft explicitly.
The trivial implementation is to add a new draft collection. I edit only this draft collection and when I press a publish button the draft collection is copied to the original collection.
So far so good, but this solution is not scalable since the time of the copy is a function of the collection size. Would you suggest another solution ?
Have a field in each document that's a draft that's set if the document is a draft. Something like:
title:"FooBar blah blah",
draft:true
When the button is clicked to publish the post you only need to update a single document - that post's document to either change draft to false or $unset it. Your queries which choose which documents to display must be checking for draft:{$ne:true} - note that this will match both documents which have draft set to false and documents which don't have the field draft at all. This allows you to leave the current documents alone and not need to update them all to have this field.