我有这个代码用于从mongofb校对中删除项目
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()方法检索正确的集合,我测试了它的宽度调试。 在集合中有我想删除的项目,它具有我在第一行中重新获得的相同ID。
该实体有一些字段和名为“Id”的Objectid字段
答案 0 :(得分:6)
你创建的_id的类型是ObjectId类,你试图用字符串等同于它无法删除。使用
var queryId = new ObjectId(id);
答案 1 :(得分:1)
如果finded
已从您的数据库返回了某些内容,则您的null
变量不应为.find()
。它为null意味着你没有找到任何东西,因此什么都不会被删除。
这里发生的情况是,您在_id
上查询ObjectId,而您将ObjectId作为Id
存储在数据库中。