Support of MongoDB for .NET

CAST supports MongoDB via its com.castsoftware.nosqldotnetexternal link extension. Details about the support provided for .NET source code is discussed below.

Supported Client Libraries

Library Version

Supported

Mongodb.dotnet driver 2.25.x

(tick)

Supported Operations

Operation

Methods Supported

Insert

MongoDB.Driver.IMongoCollection.InsertOne

MongoDB.Driver.IMongoCollection.InsertOneAsync

MongoDB.Driver.IMongoCollection.InsertManyAsync

MongoDB.Driver.IMongoCollection.InsertMany

Update

MongoDB.Driver.IMongoCollection.UpdateManyAsync

MongoDB.Driver.IMongoCollection.UpdateOneAsync

MongoDB.Driver.IMongoCollection.UpdateOne

MongoDB.Driver.IMongoCollection.UpdateMany

MongoDB.Driver.IMongoCollection.ReplaceOne

MongoDB.Driver.IMongoCollection.ReplaceOneAsync

MongoDB.Driver.IMongoCollectionExtensions.ReplaceOne

MongoDB.Driver.IMongoCollectionExtensions.ReplaceOneAsync

MongoDB.Driver.IMongoCollectionExtensions.UpdateMany

MongoDB.Driver.IMongoCollectionExtensions.UpdateManyAsync

MongoDB.Driver.IMongoCollectionExtensions.UpdateOne

MongoDB.Driver.IMongoCollectionExtensions.UpdateOneAsync

Select

MongoDB.Driver.IMongoCollection.Find

MongoDB.Driver.IMongoCollection.FindSync

MongoDB.Driver.IMongoCollection.FindAsync

MongoDB.Driver.IMongoCollection.FindOneAndDelete

MongoDB.Driver.IMongoCollection.FindOneAndDeleteAync

MongoDB.Driver.IMongoCollection.FindOneAndReplace

MongoDB.Driver.IMongoCollection.FindOneAndReplaceAsync

MongoDB.Driver.IMongoCollection.FindOneAndUpdate

MongoDB.Driver.IMongoCollection.FindOneAndUpdateAsync

MongoDB.Driver.IMongoCollection.Count

MongoDB.Driver.IMongoCollection.CountAsync

MongoDB.Driver.IMongoCollection.Aggregate

MongoDB.Driver.IMongoCollection.AggregateAsync

MongoDB.Driver.IMongoCollection.BulkWrite

MongoDB.Driver.IMongoCollection.BulkWriteAsync

MongoDB.Driver.IMongoCollectionExtensions.ReplaceOne

MongoDB.Driver.IMongoCollectionExtensions.ReplaceOneAsync

MongoDB.Driver.IMongoCollectionExtensions.UpdateMany

MongoDB.Driver.IMongoCollectionExtensions.UpdateManyAsync

MongoDB.Driver.IMongoCollectionExtensions.UpdateOne

MongoDB.Driver.IMongoCollectionExtensions.UpdateOneAsync

MongoDB.Driver.IMongoCollectionExtensions.FindOneAndDelete

MongoDB.Driver.IMongoCollectionExtensions.FindOneAndDeleteAsync

MongoDB.Driver.IMongoCollectionExtensions.FindOneAndReplace

MongoDB.Driver.IMongoCollectionExtensions.FindOneAndReplaceAsync

MongoDB.Driver.IMongoCollectionExtensions.FindOneAndUpdate

MongoDB.Driver.IMongoCollectionExtensions.FindOneAndUpdateAsync

MongoDB.Driver.IMongoCollectionExtensions.Distinct

MongoDB.Driver.IMongoCollectionExtensions.DistinctAsync

MongoDB.Driver.IMongoCollectionExtensions.CountDocuments

MongoDB.Driver.IMongoCollectionExtensions.CountDocumentsAsync

MongoDB.Driver.IMongoCollectionExtensions.Find

MongoDB.Driver.IMongoCollectionExtensions.Aggregate

MongoDB.Driver.IMongoCollectionExtensions.Count

MongoDB.Driver.IMongoCollectionExtensions.CountAsync

MongoDB.Driver.IMongoCollection.CountDocuments

MongoDB.Driver.IMongoCollection.CountDocumentsAsync

MongoDB.Driver.IMongoCollection.Distinct

MongoDB.Driver.IMongoCollection.DistinctAsync

MongoDB.Driver.IMongoCollection.DistinctMany

MongoDB.Driver.IMongoCollection.DistinctManyAsync

MongoDB.Driver.IMongoCollectionExtensions.DistinctMany

MongoDB.Driver.IMongoCollectionExtensions.DistinctManyAsync

MongoDB.Driver.IMongoCollection.AggregateToCollection

MongoDB.Driver.IMongoCollection.AggregateToCollectionAsync

MongoDB.Driver.IMongoCollection.EstimatedDocumentCount

MongoDB.Driver.IMongoCollection.EstimatedDocumentCountAsync

MongoDB.Driver.IMongoCollection.Watch

MongoDB.Driver.IMongoCollection.WatchAsync

MongoDB.Driver.IMongoCollection.MapReduce

MongoDB.Driver.IMongoCollection.MapReduceAsync

Delete 

MongoDB.Driver.IMongoCollection.DeleteMany

MongoDB.Driver.IMongoCollection.DeleteManyAsync

MongoDB.Driver.IMongoCollection.DeleteOne

MongoDB.Driver.IMongoCollection.DeleteOneAsync

MongoDB.Driver.IMongoCollection.FindOneAndDelete

MongoDB.Driver.IMongoCollection.FindOneAndDeleteAsync

MongoDB.Driver.IMongoCollectionExtensions.DeleteOne

MongoDB.Driver.IMongoCollectionExtensions.DeleteOneAsync

MongoDB.Driver.IMongoCollectionExtensions.DeleteMany

MongoDB.Driver.IMongoCollectionExtensions.DeleteManyAsync

Objects

Icon Description

DotNet MongoDB database

DotNet MongoDB collection

DotNet unknown MongoDB database

DotNet unknown MongoDB collection
Link type Source and destination of link  Methods supported
belongsTo

From DotNet MongoDB Collection object to DotNet MongoDB Database object



 useInsertLink

Between the caller .NET Method (C#) object and DotNet  MongoDB Collection object

Between the caller .NET Method (C#) object and DotNet unknown MongoDB Collection object


InsertOne

InsertOneAsync

InsertMany

InsertManyAsync

Insert

useUpdateLink

Between the caller .NET Method (C#) object and DotNet  MongoDB Collection object

Between the caller .NET Method (C#) object and DotNet unknown MongoDB Collection object

UpdateManyAsync

UpdateOneAsync

UpdateOne

UpdateMany

ReplaceOne

ReplaceOneAsync

Update

 useSelectLink

Between the caller .NET Method (C#) object and DotNet  MongoDB Collection object

Between the caller .NET Method (C#) object and DotNet unknown MongoDB Collection object

Find

FindSync

FindAsync

FindOne

FindOneAs

FindOneAndDelete

FindOneAndDeleteAync

FindOneAndReplace

FindOneAndReplaceAsync

FindOneAndUpdate

FinOneAndUpdateAsync

BulkWrite

BulkWriteAsync

Count

CountAsync

Aggregate

AggregateAsync

CountDocuments

CountDocumentsAsync

Distinct

DistinctMany

DistinctManyAsync

Watch

WatchAsync

MapReduce

MapReduceAsync

AggregateToCollection

AggregateToCollectionAsync

EstimatedDocumentCount

EstimatedDocumentCountAsync

useDeleteLink 

Between the caller .NET Method (C#) object and DotNet  MongoDB Collection object

Between the caller .NET Method (C#) object and DotNet unknown MongoDB Collection object

DeleteMany

DeleteManyAsync

DeleteOne

DeleteOneAsync

FindOneAndDelete

FindOneAndDeleteAsync

Amazon DocumentDB Identification

The below mentioned objects have properties to indicate whether the object is of type MongoDB or Amazon DocumentDB:

DotNet MongoDB collection object

Property Description

Type of Property Value

Value: Meaning

Is an Amazon DocumentDB collection? Integer

1: The collection object is of type Amazon DocumentDB

0: The collection object is of type MongoDB

DotNet unknown MongoDB collection object

Property Description

Type of Property Value

Value: Meaning

Is an Amazon DocumentDB collection? Integer

1: The collection object is of type Amazon DocumentDB

0: The collection object is of type MongoDB

What results can you expect?

Some example scenarios are shown below:

Database and Collection Creation

static void InsertOneInMongoDB()
        {
        
            MongoClient client = new MongoClient("mongodb://127.0.0.1:27017");
          
            IMongoDatabase db = client.GetDatabase("TestDb1");
     
            IMongoCollection<Person> persons = db.GetCollection<Person>("Persons");
            IMongoCollection<Dog> dogs = db.GetCollection<Dog>("Dogs");
}

Insert Operation

{
            MongoClient client = new MongoClient("mongodb://127.0.0.1:27017");
            IMongoDatabase db = client.GetDatabase("TestDb1");
            IMongoCollection<BsonDocument> dogs = db.GetCollection<BsonDocument>("Dogs");

            string json = "{Name:'大黄',Age:10,Weight:50}";
            BsonDocument d1 = BsonDocument.Parse(json);//Json
            dogs.InsertOne(d1);

}

Delete Operation

 public void DeleteAllPurchases()
        {
            MyShoppingCollection.DeleteMany(FilterDefinition<PurchaseBson>.Empty, null);
        }

Select Operation

public PurchaseBson[] FindPurchases()
        {
            var purchases = MyShoppingCollection.Find(FilterDefinition<PurchaseBson>.Empty, null).ToList();
            return purchases.ToArray();
        }

Update Operation

 public async Task<IActionResult> Update()
        {
            var query = from k in (from a in _context.Books.AsQueryable()
                                    where a.Title == "Test Book 2"
                                    from b in a.Posts
                                    select b)
                         where k.Title == "Second One"
                         select k;
            var result = await query.FirstOrDefaultAsync();
            result.ReadCount = 5;

            _context.Books
                .FindOneAndUpdate(x => x.Title == "Test Book 2" && x.Posts.Any(p => p.Title == "Second One"),
                                    Builders<Book>.Update.Set(x => x.Posts[-1], result));

            return Redirect("/");
        }

Amazon DocumentDB Identification

class Program
    {
       static void Main(string[] args)
        {
           string template = "mongodb://{0}:{1}@{2}/?replicaSet=rs0&readpreference={3}";
           string username = "root";
           string password = "rootroot";
           string clusterEndpoint = "sample-cluster.cluster-cqjaxx9hbhi0.us-west-2.docdb.amazonaws.com:27017";
           string readPreference = "secondaryPreferred";

           string connectionString = String.Format(template, username, password, clusterEndpoint, readPreference);
           var settings = MongoClientSettings.FromUrl(new MongoUrl(connectionString));
           var client = new MongoClient(settings);

           var database = client.GetDatabase("library");
           var collection = database.GetCollection<BsonDocument>("Books");

           var docToInsert = new BsonDocument { { "title", "Harry Potter" } };
           collection.InsertOne(docToInsert);
        }
    }

Reading Database and Collection from Json File

.cs code

 public class CustomerService
    {
        private readonly IMongoCollection<Customer> _customer;
        private readonly DeveloperDatabaseConfiguration _settings;

        public CustomerService(IOptions<DeveloperDatabaseConfiguration> settings)
        {
            _settings = settings.Value;
            var client = new MongoClient(_settings.ConnectionString);
            var database = client.GetDatabase(_settings.DatabaseName);
            _customer = database.GetCollection<Customer>(_settings.CustomerCollectionName);
        }

        public async Task<List<Customer>> GetAllAsync()
        {
            return await _customer.Find(c => true).ToListAsync();
        }
    }

.cs file

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WorkingWithMongoDB.WebAPI.Configuration
{
    public class DeveloperDatabaseConfiguration
    {
        public string CustomerCollectionName { get; set; }
        public string ConnectionString { get; set; }
        public string DatabaseName { get; set; }
    }
}

json file

{
  "DeveloperDatabaseConfiguration": {
    "CustomerCollectionName": "Customers",
    "ConnectionString": "mongodb://localhost:27017",
    "DatabaseName": "DevelopmentDatabase"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

Known Limitations

  • Database and Collections are resolved in following situation: 
    • Anywhere in the .cs files  and JSON files
  • If Database and Collection values are not resolved, will create Unknown Database and Collection objects
  • Setting of properties related to Amazon DocumentDB identification depends on proper resolution of connection string.