What is the better way to implement shared record with ability to remove it by each user

From: Igor Khomenko <igor@xxxxxxxxxxxxx>
To: mongodb-user <mongodb-user@xxxxxxxxxxxxxxxx>
Date: Tue, 26 Apr 2016 05:47:50 -0700 (PDT)
Why ads?
I have a MongoDB record, for example, called **Letter**. 

This letter can be sent to some group of users, so many users have an 
access to it.

A **Letter** can be sent in a context of **Topic** that is shared between 
group of users.

So, the **Topic** model has the following structure:

 - _id
 - name (String)
 - users_ids (Array of users ids, that can send letters withing this topic)

Also, each user can remove a letter for himself. 

I have some concerns regarding how to implement/store this model with 
MongoDB.

**Variant 1:**

MongoDB record, fields:

 - _id (ObjectId)
 - topic_id (ObjectId)
 - text (String)
 - deleted_for_users_ids (Array)

When a user deletes a record then we add his ID to the 
**deleted_for_users_ids** array. 

To retrieve records I use the following request:

    db.letters.find({topic_id: 'X', deleted_for_users_ids: {$nin: 
'user_id'}})

It's not good because we can't add an Index for 'nin' filter in MongoDB. 

**Variant 2:**

MongoDB record, fields:

 - _id (ObjectId)
 - text (String)
 - topic_id (ObjectId)
 - accesible_for_users_ids (Array) 

When a user creates a record then the **accesible_for_users_ids** array 
will be equal to the **topic.user_ids** array.

When a user deletes a record then we remove his ID to the 
**deleted_for_users_ids** array. 

To retrieve records I use the following request:

    db.letters.find({topic_id: 'X', accesible_for_users_ids: {$in: 
'user_id'}})

It's better, now we can use Index because a filter 'in' can be covered by 
index.

But I see that indexes for array use a lot of RAM, which is not good.

====

So 2 concerns: RAM and speed.

Do you have any other ideas how to implement logic like that on MongoDB

-- 
You received this message because you are subscribed to the Google Groups "mongodb-user"
group.

For other MongoDB technical support options, see: https://docs.mongodb.org/manual/support/
--- 
You received this message because you are subscribed to the Google Groups "mongodb-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mongodb-user+unsubscribe@xxxxxxxxxxxxxxxx.
To post to this group, send email to mongodb-user@xxxxxxxxxxxxxxxx.
Visit this group at https://groups.google.com/group/mongodb-user.
To view this discussion on the web visit https://groups.google.com/d/msgid/mongodb-user/3a52e9f3-ee5c-4064-bccc-0aeb70fde6f6%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Why ads?