4

我需要使用官方 C# 驱动程序从 mongo db 的集合中删除一些记录。我的代码如下。

public static void Remove(List<ObjectId> objectIds)
{
        ObjectMongoCollection.Remove(Query.In("NotificationId", new BsonArray(objectIds)), SafeMode.True);
}

public class Notification
{
    public static MongoCollection<Notification> ObjectMongoCollection = MongoHelper.GetMongoServer("MongoKelimeYarisi").GetDatabase("KelimeYarisi").GetCollection<Notification>("Notification");

    [BsonId]
    public ObjectId NotificationId { get; set; }
    public int PlayerId { get; set; }
    public string OpponentName { get; set; }
    public string gameId { get; set; }
    public DateTime CreateDate { get; set; }
    public NotificationStatus Status = NotificationStatus.New;
    public NotificationType Type = NotificationType.RoundSubmit;
    public bool IsPushed { get; set; }

它运行没有错误,但似乎不起作用。如何使用 ObjectIds 列表删除记录。

也试过:

ObjectMongoCollection.Remove(Query.In("_id", new BsonArray(objectIds)), SafeMode.True);
4

3 回答 3

5

我使用了一种不同的方法来获取 mongo 查询并且有效。我构建了一个 linq 查询并将其转换为一个 mongo 查询。

    public static void Remove(List<ObjectId> objectIds)
    {
        var linqQuery = from n in ObjectMongoCollection.AsQueryable<Notification>() where n.NotificationId.In(objectIds) select n;
        var mongoQuery = ((MongoQueryable<Notification>)linqQuery).GetMongoQuery();       
        ObjectMongoCollection.Remove(mongoQuery);
    }
于 2012-08-31T10:32:45.067 回答
4

我无法重现这一点。我编写了一个与您的代码尽可能相似的测试程序,实际上它确实删除了多条记录。这是我的测试程序:

http://pastie.org/4618039

如果您还有其他问题,请告诉我。

于 2012-08-30T18:46:33.763 回答
1

你可以写一个方法叫做:

public void destroy() {
        ...
    }

在此方法中,您将使用您的 ObjectId 列表并遍历它们。

foreach(Enitity enitity in entities) {
    ...
}

您可以使用MongoDB.Driver.Linq执行列表中的特定查询:

var query = Query<Entity>.EQ(e => e.Attribute, entity.Value);
db.GetCollection<Entity>("Entity").Remove(query);

其中 Value 将是您想要的对象的值。这将从数据库中删除包含特定值的元素。

希望这个对你有帮助。

于 2014-12-06T15:21:04.363 回答