2012-01-15 46 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; 
} 
相關問題