Exemplo n.º 1
0
        public Task mergeDocumentsBatchAsync <OriginalObjectType>(string[] ids, OriginalObjectType[] patchDocument, IClientSessionHandle?session)
        {
            if (ids.Length != patchDocument.Length)
            {
                throw new InvalidOperationException($"{nameof(ids)} collection and {nameof(patchDocument)} have different size");
            }
            var bulkOps = new List <WriteModel <OriginalObjectType> >();
            var idName  = GE.PropertyName <MongoEntity>(x => x._id, false);

            for (int i = 0; i < ids.Length; i++)
            {
                var update = new BsonDocument()
                {
                    { "$set", patchDocument[i].ToBsonDocument() }
                };
                bulkOps.Add(new UpdateOneModel <OriginalObjectType>(
                                Builders <OriginalObjectType> .Filter.Eq(idName, new ObjectId(ids[i])), update)
                {
                    IsUpsert = false
                });
            }
            return(session == null
                ? getCollection <OriginalObjectType>().BulkWriteAsync(bulkOps)
                : getCollection <OriginalObjectType>().BulkWriteAsync(session, bulkOps));
        }
        private static BsonDocument addIsLikedByField(string requesterId)
        {
            var input        = GE.PropertyName <SomeEntity>(x => x.likedBy, false);
            var isLikedField = GE.PropertyName <SomeEntityProjection>(x => x.isLiked, false);

            return(new BsonDocument("$addFields", MongoHelper.addFieldAnyElementInTemplate(input,
                                                                                           string.Empty, requesterId, isLikedField)));
        }
Exemplo n.º 3
0
        public Task mergeDocumentAsync <OriginalObjectType>(string documentId, OriginalObjectType patchDocument, IClientSessionHandle?session)
        {
            var filter = Builders <OriginalObjectType> .Filter.Eq(GE.PropertyName <MongoEntity>(x => x._id, false), new ObjectId(documentId));

            var update = new BsonDocument()
            {
                { "$set", patchDocument.ToBsonDocument() }
            };

            return(session == null?
                   getCollection <OriginalObjectType>().UpdateOneAsync(filter, update)
                       :
                       getCollection <OriginalObjectType>().UpdateOneAsync(session, filter, update));
        }