Как удалить один «документ» по «ID» с помощью официального драйвера C # для MongoDB?

Может ли кто-нибудь показать мне, есть ли лучший способ удалить один document из MongoDB с помощью официального C # Драйвер, чем то, что у меня ниже-

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

Этот код работает, но мне кажется слишком много работы. Например, команда «Сохранить» берет экземпляр и обновляет его. Я хочу что-то вроде- Remove(item).

Примечания: я пытаюсь использовать официальный драйвер C #, а не NoRM. или Samus, который кажется устаревшим.


person Travis Laborde    schedule 15.01.2012    source источник


Ответы (5)


Вот как вы это делаете. Я уверен, что вы это знаете, но если вы хотите поместить его в одну строку, вы можете объединить его, чтобы вам не нужно было определять переменную запроса:

collection.Remove(Query.EQ("_id", a.Id));
person Eve Freeman    schedule 15.01.2012
comment
Я пытаюсь удалить поле, отличное от _id, и попробовал Query.EQ (FieldName, value), но это не сработало. Как мне это сделать? Фактически, ваш код тоже дает ту же ошибку: в настоящее время могут отображаться только классы. - person Burak Karakuş; 04.03.2015
comment
Я только что понял, что использовал linq-запрос, а не Query.EQ () выше, и я думаю, это была проблема, потому что он работал, когда я изменил его на запрос Query.EQ (). Спасибо за вашу помощь. - person Burak Karakuş; 04.03.2015
comment
Это больше не ответ, драйвер MongoDb значительно изменился, это неправильный ответ: collection.DeleteOne (a = ›a.Id == id); - person Brian Ogden; 13.09.2017

Если [id] является строкой, вы должны явно использовать экземпляр ObjectId.

var query = Query.EQ("_id", ObjectId.Parse(id));
person Ostati    schedule 27.07.2014
comment
У меня возникла проблема, которую решает этот ответ. Спасибо. Проголосовали. - person ton.yeung; 31.07.2014

Самый простой способ

Удалите document из collection для драйвера C # MongoDB (v2.0 или новее) -

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

Or-

await collection.DeleteOneAsync(a => a.Id==id);
person Minhas Kamal    schedule 07.02.2016

Действие моего контроллера MVC ASP.NET Core принимает Id в качестве строкового параметра. Затем я разбираю его и использую результат в операторе DeleteOne ():

[HttpPost]
public IActionResult Delete(string id)
{
    ObjectId objectId = ObjectId.Parse(id);
    DbContext.Users.DeleteOne(x => x.Id == objectId);
    return null;
}
person Aleksei Mialkin    schedule 25.11.2017

var filter = Builders<BsonDocument>.Filter.Eq("_id",ObjectId.Parse(id));
var x = data.DeleteOne(filter);

Я использую это с текущей версией (в 2019 году), и она работает.

person Eugen    schedule 25.10.2020