2012-10-01 81 views
2

我有此代碼爲移除項目弗羅馬一個mongofb覈對MongoDB的C#刪除不起作用

private MongoCollection<T> GetCollection() 
    { 
     connectionString = "mongodb://localhost/?safe=true"; 
     server = MongoServer.Create(connectionString); 
     database = server.GetDatabase("CSCatalog"); 

     return database.GetCollection<T>("myCollectionName"); 
    } 
public bool Delete(T entity) 
    {    
     var id = typeof(T).GetProperty("Id").GetValue(entity,null).ToString();    
     var query = Query.EQ("_id",id); 
     var finded = GetCollection().Find(query); // return null 
     var result= GetCollection().Remove(query, MongoDB.Driver.RemoveFlags.Single); // no errors, but don't remove 

     return esito.Ok; //return true but donn't remove. 


    } 

的GetCollection()方法retrive右側收集,我已經測試了它的寬度調試。 在集合中有我想要刪除的項目,它具有與我在第一行中搜索到的相同的標識。

實體有一些領域和對象ID提起所謂的「ID」

+2

會發生什麼? 「不起作用」不夠具體。 – nalply

回答

1

finded變量不應該是null如果.find()返回從數據庫中的東西。它是空的意味着你沒有找到任何東西,因此沒有東西被刪除。

看起來像這裏發生的是,您正在查詢_id的ObjectId,而您將該ObjectId存儲在數據庫中作爲Id

6

您創建的_id類型是ObjectId類,您試圖將其與字符串等同,因此無法刪除。使用

var queryId = new ObjectId(id);