2012-01-15 48 views
23

可有人请告诉我,如果有更好的方式使用Official C# Driver比我有如下─如何使用官方的C#驱动程序为MongoDB删除一个'文档''ID'?

var query = Query.EQ("_id", a.Id); 
database.GetCollection<Animal>("Animal").Remove(query); 

此代码的工作,但似乎太多的工作给我删除MongoDB的一个document。例如“保存”命令 - 接收一个实例并更新它。我想要的东西像 - Remove(item)

备注:我试图使用C#的官方驱动程序,而不是NoRMSamus这似乎过时了。

回答

32

这就是你这样做的方式。我敢肯定,你知道这一点,但如果你希望把它放在一个行,你可以结合,所以你并不需要定义一个查询变量:

collection.Remove(Query.EQ("_id", a.Id)); 
+0

我想比其他_id字段删除,我试图Query.EQ(“字段名”,值),但它没没有工作。我应该怎么做? 实际上,你的代码也会给出同样的错误:“目前只能映射类。” – 2015-03-04 13:46:21

+0

您是否正确使用导入? – 2015-03-04 16:49:01

+0

我刚刚意识到我使用了一个linq查询,而不是上面的Query.EQ(),我猜这就是问题所在,因为它在我将其更改为Query.EQ()查询时起作用。谢谢你的帮助。 – 2015-03-04 17:56:00

17

如果[ID]是字符串,则必须明确使用ObjectId实例。

var query = Query.EQ("_id", ObjectId.Parse(id)); 
+0

我有一个问题,这个答案修复。谢谢。 Upvoted。 – 2014-07-31 19:38:27

10

collection删除documentC#MongoDB.Driver版本2.0或以后的SIMPLEST方式

collection.DeleteOne(a => a.Id==id); 
0

我的ASP.NET MVC核心控制器的动作接受ID作为字符串参数。然后我分析它,并在DeleteOne使用的结果()语句:

[HttpPost] 
public IActionResult Delete(string id) 
{ 
    ObjectId objectId = ObjectId.Parse(id); 
    DbContext.Users.DeleteOne(x => x.Id == objectId); 
    return null; 
} 
相关问题