C# 使用InsertOneAsync(.NET驱动程序2.0)插入新文档
在较旧的.Net API版本中:C# 使用InsertOneAsync(.NET驱动程序2.0)插入新文档,c#,asp.net,mongodb,mongodb-.net-driver,mongodb-csharp-2.0,C#,Asp.net,Mongodb,Mongodb .net Driver,Mongodb Csharp 2.0,在较旧的.Net API版本中: 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 } };
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);
MongoClient客户端=新的MongoClient();
var server=client.GetServer();
var db=server.GetDatabase(“foo”);
var collection=db.GetCollection(“bar”);
var document=新的BsonDocument{{{u id',1},{x',2};
收集、保存(文件);
成功了
当我使用新的.Net驱动程序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);
var客户端=新的MongoClient(“mongodb://localhost:27017");
var database=client.GetDatabase(“foo”);
var collection=database.GetCollection(“bar”);
var document=新的BsonDocument{{{u id',1},{x',2};
等待收集。插入同步(文档);
错误:“await”运算符只能在异步方法中使用。
考虑用“AsiNC”修饰符标记该方法并更改
它的返回类型为“Task”
参考文献:
我想询问如何使用.Net驱动程序2.0插入新文档。谢谢
[更新1]我尝试实施:
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);
}
公共类存储库
{
公共静态异步任务插入()
{
var客户端=新的MongoClient(“mongodb://localhost:27017");
var database=client.GetDatabase(“foo”);
var collection=database.GetCollection(“bar”);
var document=新的BsonDocument{{{u id',1},{x',2};
等待收集。插入同步(文档);
}
}
静态void Main(字符串[]参数)
{
Task tsk=Repository.Insert();
tsk.Wait();
控制台写入线(“状态:+tsk.Status”);
}
结果:等待激活。数据库中没有任何更改。请帮帮我
[更新2(已解决)]:添加tsk.Wait();成功了!
谢谢这篇文章:你的方法应该是
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);
}
public异步void Insert()
{
var客户端=新的MongoClient(“mongodb://localhost:27017");
var database=client.GetDatabase(“foo”);
var collection=database.GetCollection(“bar”);
var document=新的BsonDocument{{{u id',1},{x',2};
等待收集。插入同步(文档);
}
您可以在MongoDB C#驱动程序元文件中找到,声明的所有函数都没有async
,而wait
关键字需要async,原因如下:
错误:“await”运算符只能在异步方法中使用。考虑用“AsiNC”修饰符标记该方法,并将其返回类型改为“任务”。
您只需删除wait
关键字即可。它适用于我var client=new MongoClient(“mongodb://localhost:27017");
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();
var database=client.GetDatabase(“foo”);
var collection=database.GetCollection(“bar”);
var document=新的BsonDocument{{{u id',1},{x',2};
任务任务=collection.InsertOneAsync(文档);
task.Wait();
//从这里开始,您的记录/文档应该在MongoDB中。最初在数据库中看不到任何内容的原因是您没有等待
Insert
方法完成,这是您后来通过调用task.wait()
完成的。正如您提供的答案链接中的注释所述,这样调用.Wait()可能会导致死锁。相反,您应该调用wait Repository.Insert()
看看这篇关于Wait async的帖子,我已经按照你说的那样试过了。Repository respository=新存储库();Task tsk=respository.Insert();控制台写入线(“状态:+tsk.Status”);结果:等待激活。数据库中没有任何更改!我不知道为什么。我以前从未使用过异步或任务,所以我不知道为什么。你能帮我吗?是的,但是做一件事,请确保你的连接工作正常我的意思是你可以从mongo获取数据?因为async和await什么都不是,但它只是释放您的主线程供您帮助!我加上:tsk.Wait();。成功了。隐马尔可夫模型!我真的不擅长同步。