I have a rather complex MongoDB Operator that uses a where to look through multiple users to see if they have a certain value, and if so it changes the value of it. My problem is that the value it checks for can be different for different cases, so my $set would require me to add strings together to get the property that I would change. This is what I mean:
users.update({$where:function() {
return this.profile.chatInfo.subscribedRooms.hasOwnProperty(findChatroom._id);
}},{$set: {"profile.chatInfo.subscribedRooms."+findChatroom._id:false}},{multi:true}
)
The only thing that does not work in that code is the part in the $set where I add "profile.chatInfo.subscribedRooms."+findChatroom._id
Another thing I have tried was making a variable that was equal to those strings added, and use the variable, but it also didn't work.
var addedString = "profile.chatInfo.subscribedRooms."+findChatroom._id;
users.update({$where:function() {
return this.profile.chatInfo.subscribedRooms.hasOwnProperty(findChatroom._id);
}},{$set: {addedString:false}},{multi:true}
)
What I am actually trying to do here, is that whenever a chat message is sent, this operator is ran. It looks for every user that is subscribed to a room, and sets the value to false. The value being true or false just refers to whether or not the user has read the chat. This is to be used for notifications.
Edit: My question is not a duplicate of this because the MongoDB set command works differently from simply changing the value of an object's property. To add onto that, MongoDB can't even use the notation of object[property], because the docs say the only way to access embedded fields is through dot notation.