此刻我有点奇怪的问题。我有一个聊天室风格的场景,其中创建了一个“房间”,然后每个房间都有聊天的“条目”。
现在我有一个可以删除房间的网络服务,它将通过其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); }
当调用this时,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
中推断出这种类型答案 0 :(得分:0)
最终找出造成这种情况的原因!
像所有好问题一样,这个问题是由我造成的,因为我的依赖注入配置都设置正确,并指向正确的集合,但是在测试中而不是指向它指向的“条目”集合“进入”。
它没有点击,即使我使用GUI检查表值,并且发送的查询看起来很好。
无论如何,使用GUID等搜索没有问题,这是一个红色的鲱鱼,所以至少问题现在已经解决了,我希望这能帮助其他像我这样的白痴的人:)