2013-07-09 92 views
1

我现在有点奇怪的问题。我有一个聊天室风格的场景,其中创建了“房间”,然后每个聊天室都有“条目”。MongoDB不删除行,没有错误使用C#驱动程序

现在我有一个可以删除房间的网络服务,它将通过它的ID删除“房间”,然后它将删除具有相同“房间ID”的任何“条目”。

这样的模式的一个例子是这样的:

public class Room 
{ 
    Guid Id {get;set;} 
    Guid CreatorId {get;set;} 
    DateTime DateCreated {get;set;} 
} 

public class Entry 
{ 
    Guid Id {get;set;} 
    Guid RoomId {get;set;} 
    string Content {get;set;} 
    DateTime DateCreated {get;set;} 
} 

在它成功地删除但是它不能删除所有条目的那间房间上面的场景,但在返回的没有错误查询。

查询基本上是:

var roomQuery = New QueryDocument(new BsonElement("Id", currentRoomId)); 
var roomResult = roomsCollection.Remove(roomQuery); 
if(roomResult .Ok == false) 
{ throw new Exception(roomResult .Message); } 

var entriesQuery = New QueryDocument(new BsonElement("RoomId", currentRoomId)); 
var entriesResult = entriesCollection.Remove(entriesQuery); 
if(entriesResult .Ok == false) 
{ throw new Exception(entriesResult .Message); } 

currentRoomId已经在上下文中时,它是用来删除它没有错误成功取出了房间,这是所谓的。但是,当entryCollection被调用时,它返回一个OK,没有错误,但记录不会被删除......这个东西有什么遗漏吗?

在我的场景中有2个条目要删除和1个房间。如前所述,房间被删除,2项不是。通过控制台在这里的DB搜索

== ==编辑

后是如何将数据存储:

/* 0 */ 
{ 
    "_id" : new BinData(3, "/yTE1cDMh0W39IIBueAXdA=="), 
    "Id" : new BinData(3, "/yTE1cDMh0W39IIBueAXdA=="), 
    "RoomId" : new BinData(3, "xnDcYz2A5kyT5CdYRMSmig=="), 
    "Content" : "Some Test Content", 
    "DateCreated" : ISODate("0001-01-01T00:00:00Z") 
} 

试图做一个发现后,如:

db.entry.find({ "RoomId" : "63dc70c6-803d-4ce6-93e4-275844c4a68a" }).limit(50); 

我得到0个匹配,并且对于为什么...有点莫名其妙,是因为Mongo存储字段的方式,所以它会尝试执行文本匹配并失败,而不是二进制匹配或值匹配等?

如果我是这样做:

db.entry.find({ "RoomId" : CSUUID("63dc70c6-803d-4ce6-93e4-275844c4a68a") }).limit(50); 

我得到的比赛,但是我不知道我怎么能在.NET

推断该类型
+0

我常使用泛型类型来构建查询。 MongoDb中的'RoomId'值是否与传入查询的类型相同? – WiredPrairie

+0

我在上面的模型中使用了ClassMap的AutoMap功能,所以它是相同的类型和名称,在MongoVue中,我可以看到行,并具有与Room相同的名称和值。 – Grofit

+1

虽然你正在使用'QueryDocument'和'BsonElement',而不是强类型的版本(比如'Query '),那么如何考虑AutoMap功能呢? – WiredPrairie

回答

0

发现了什么最终导致此!

像所有优秀的问题一样,这个问题是由我造成的,因为我的依赖注入配置都设置正确,并且指向正确的集合,但是在测试中,而不是指向“Entries”集合,它是指向“Entry”。

它没有点击,即使当我使用GUI检查表值时,发送的查询看起来很好。

反正有各地使用的GUID等搜索没有任何问题,这是一个红鲱鱼,所以至少现在的问题是解决了,我希望这可以帮助其他人谁是是一个傻瓜像我一样:)

相关问题