Search code examples
c#mongodbmongodb-.net-driver

Delete/pull one document based on multiple conditions


I'm trying to find one MongoDB document based on two inputs from the user. Here's my example:

public async Task RemoveAdminRole(string userId, string groupId) { 
    var idFilter = Builders<Group>.Filter.Eq(group => group._id, groupId);
    var roleFilter = Builders<Group>.Update.PullFilter(group => group.Roles, role => role.UserId == userId);
    var roleFilter2 = Builders<Group>.Update.PullFilter(group => group.Roles, role => role.Role == "ADMIN");

    var update = roleFilter & roleFilter2;

    await this.DataContext.MongoCollection.UpdateOneAsync(idFilter, update);
}

Basically what I want to do there, is remove/pull the element "Roles" inside Group that has role.Role == "ADMIN" and role.UserId == userId. I'm getting an error:

Operator '&' cannot be applied to operands of type 'UpdateDefinition<Group>' and 'UpdateDefinition<Group>'

How would I create multiple of these PullFilter (or similar) so I can remove the specific element based on my two inputs?


Solution

  • You can add the second one like follows:

    var roleFilter = Builders<Group>.Update
        .PullFilter(group => group.Roles, role => role.UserId == userId)
        .PullFilter(group => group.Roles, role => role.Role == "ADMIN");