Insert new document using InsertOneAsync (.NET Driver 2.0)

16,722

Solution 1

Your method should be like

 public async void Insert()
    {
         var client = new MongoClient("mongodb://localhost:27017");
        var database = client.GetDatabase("foo");
        var collection = database.GetCollection<BsonDocument>("bar");

        var document = new BsonDocument { { "_id", 1 }, { "x", 2 } };
        await collection.InsertOneAsync(document);

    }

Solution 2

var client = new MongoClient("mongodb://localhost:27017");
var database = client.GetDatabase("foo");
var collection = database.GetCollection<BsonDocument>("bar");

var document = new BsonDocument { { "_id", 1 }, { "x", 2 } };
Task task = collection.InsertOneAsync(document);
task.Wait();

// From here on, your record/document should be in the MongoDB.

Share:
16,722
Hana
Author by

Hana

Catch (Exception e) { //who cares? }

Updated on August 21, 2022

Comments

  • Hana
    Hana over 1 year

    In the older .Net API version :

    MongoClient client = new MongoClient();
    var server = client.GetServer();
    var db = server.GetDatabase("foo");
    var collection = db.GetCollection<BsonDocument>("bar");
    var document = new BsonDocument { { "_id", 1 }, { "x", 2 } };
    collection.Save(document);
    

    It worked.

    When i use new .Net Driver 2.0 :

    var client = new MongoClient("mongodb://localhost:27017");
    var database = client.GetDatabase("foo");
    var collection = database.GetCollection<BsonDocument>("bar");
    
    var document = new BsonDocument { { "_id", 1 }, { "x", 2 } };
    await collection.InsertOneAsync(document);
    

    Error : The 'await' operator can only be used within an async method. Consider marking this method with the 'async' modifier and changing its return type to 'Task'.

    Refs :

    Introducing the 2.0 .NET Driver

    Reading and Writing

    I want to ask how to insert a new document using .Net Driver 2.0. Thanks.

    [Update 1] I tried to implement :

    public class Repository
    {
        public static async Task Insert()
        {
            var client = new MongoClient("mongodb://localhost:27017");
            var database = client.GetDatabase("foo");
            var collection = database.GetCollection<BsonDocument>("bar");
    
            var document = new BsonDocument { { "_id", 1 }, { "x", 2 } };
            await collection.InsertOneAsync(document);
        }
    }
    
    static void Main(string[] args)
    {            
           Task tsk = Repository.Insert();
           tsk.Wait();
           Console.WriteLine("State: " + tsk.Status);            
    }
    

    Result : WaitingForActivation. Nothing changed in database. Please help me!

    [Update 2 (Solved)] : add tsk.Wait(); It worked ! Thanks this post : How would I run an async Task method synchronously?

  • Hana
    Hana about 9 years
    i tried as u said. Repository respository = new Repository(); Task tsk = respository.Insert(); Console.WriteLine("State: " + tsk.Status); Result : WaitingForActivation.
  • Hana
    Hana about 9 years
    Nothing changed in database ! I dont know why. I never used async or task before so i dont know why. Can u help me ?
  • Dhaval Patel
    Dhaval Patel about 9 years
    ya sure but do one thing please make sure your connection is working fine I mean you can fetch the data from mongo ? because async and await is nothing but it's just free your main thread
  • Hana
    Hana about 9 years
    Tks for your help! i add : tsk.Wait();. It worked. Hmm! Im really bad at synchronise.