private static FilterDefinition <TDocument> GetItemFilter(ObjectId documentId, ObjectId itemId) { var documentFilter = documentId.BuildDocumentFilter <TDocument>(); var itemFilter = Builders <TDocument> .Filter.ElemMatch(x => x.Items, x => x.Id == itemId); return(Builders <TDocument> .Filter.And(documentFilter, itemFilter)); }
public static async Task <TDocument> FindDocument <TDocument>(this IMongoCollection <TDocument> collection, ObjectId documentId, CancellationToken cancellationToken) where TDocument : IDocumentWithId { var filter = documentId.BuildDocumentFilter <TDocument>(); var options = new FindOptions <TDocument> { Limit = 1, }; using var cursor = await collection.FindAsync(filter, options, cancellationToken); var document = await cursor.FirstOrDefaultAsync(cancellationToken); if (document == null) { throw new NotFoundException($"The document with id of {documentId} was not found"); } return(document); }
private Task UpdateDocument(ObjectId documentId, UpdateDefinition <TDocument> update, CancellationToken cancellationToken) { var documentFilter = documentId.BuildDocumentFilter <TDocument>(); return(UpdateDocument(documentId, documentFilter, update, cancellationToken)); }