Как выполнить обновление или удаление в списке с помощью драйвера БД Mongo - PullRequest
0 голосов
/ 16 ноября 2018

Я учился Монго БД и в этом у меня следующие сомнения.Пожалуйста, помогите

У меня есть класс, как в следующем примере

public class NoteUser
{
    private int userid{get;set;}
    private List<notes> notes{get;set;}
}

И теперь у меня есть класс контекста для чтения из базы данных.И у меня также есть один класс репозитория для чтения значений из этого класса контекста, и у этого класса есть функции, подобные следующим:

private bool DeleteNoteByUserId(int userId, int noteId)
{
    //Here i need to delete the note which having id as noteId for user 
    //who having the id as userId
}

private bool UpdateNoteByUserId(int userId, int noteId, Note objNote)
{
    //Here i need to perform update the note with objNote which having id as 
    //noteId for user who having the id as userId
}

Как мне кодировать его, используя MongoDBDriver в моем классе репозитория?

1 Ответ

0 голосов
/ 17 ноября 2018

Для удаления заметки (вложенного объекта) необходимо использовать оператор $ pull и указать условие фильтрации. В C # вы можете использовать следующий код:

var filter = Builders<NoteUser>.Filter.Eq(x => x.userid, userId);
var update = Builders<NoteUser>.Update.PullFilter(f => f.notes, p => p.noteid == noteId);

Col.UpdateOne(filter, update);

Для обновления вложенного объекта вы можете использовать $ позиционный оператор и указать все свойства. Значение -1 представляет примечание, которое соответствует части фильтра.

var filter = Builders<NoteUser>.Filter.And(Builders<NoteUser>.Filter.Eq(x => x.userid, userId), 
    Builders<NoteUser>.Filter.ElemMatch(x => x.notes, f => f.noteid == noteId));

var update = Builders<NoteUser>.Update.Combine(
            Builders<NoteUser>.Update.Set(user => user.notes[-1].firstProp, note.firstProp),
            Builders<NoteUser>.Update.Set(user => user.notes[-1].another, note.another));

Col.UpdateOne(filter, update);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...