1

我现在有一个奇怪的问题。我有一个聊天室风格的场景,其中创建了一个“房间”,然后每个房间都有聊天的“条目”。

现在我有一个可以删除房间的网络服务,它会通过它的 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 中推断出这种类型

4

1 回答 1

0

最终找出是什么原因造成的!

像所有好的问题一样,这个问题是由我引起的,因为我的依赖注入配置都设置正确,并且指向正确的集合,但是在测试中,它不是指向“条目”集合,而是指向“条目” ”。

即使我使用 GUI 检查表值,它也没有单击,并且发送的查询似乎很好。

无论如何,使用 GUID 等进行搜索没有问题,这是一条红鲱鱼,所以至少现在问题已经解决了,我希望这可以帮助像我这样的白痴的其他人:)

于 2013-07-12T17:59:12.747 回答