我现在有一个奇怪的问题。我有一个聊天室风格的场景,其中创建了一个“房间”,然后每个房间都有聊天的“条目”。
现在我有一个可以删除房间的网络服务,它会通过它的 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 在调用它时已经在上下文中,因为它用于删除已成功删除且没有错误的房间。但是,当调用 entriesCollection 时,它会返回 OK 且没有错误,但不会删除记录……我错过的这些东西是否有任何陷阱?
在我的场景中,要删除 2 个条目和 1 个房间。如前所述,房间被删除,2 个条目没有。
== 编辑 ==
通过控制台在数据库中搜索后,数据的存储方式如下:
/* 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 中推断出这种类型