2013-11-23 38 views
0

当我试图找到一个匹配ID的集合om时,在这里有一种MongoDB问题。 由于我建立了一种基于MongoDB的树结构。我拥有包含姓名,父母和孩子等多重属性的对象,以便他们知道这些关系。 现在我可以通过它的子标识并加载对象,并逐个加载每个对象。我多么注意到它的速度更快让它们成为一个集合。C#查找MongoDB中列表<string>中的字符串

所以我现在的问题是,如何在集合中找到在MongoDB中表示的树节点对象中的intrest ID。的MongoDB的文档怎么看待

{ 
    "_id" : ObjectId("523de6c6d7b47f1f74c98ba2"), 
    "IDType" : "root", 
    "Name" : "test root", 
    "Relations" : [{ 
     "Children" : { 
     "ChildrenList" : ["523de725d7b47f1d0c8242f1", "523de746d7b47f1d0c8242f5"] 
     }, 
     "Parents" : { 
     "ParentList" : [] 
     } 
    }] 
} 

所以,我将如何找到ID之一,通过在ChildrenList一个ID匹配

例子吗? 这是RelationsChildren and Parents的数组。这两个包含要匹配的ID数组。

已经尝试过了,没有成功。

IMongoQuery searchQuery = Query.ElemMatch("Children", Query.EQ("ChildrenList", "523de746d7b47f1d0c8242f5")); 
+1

“Children”字段是'“关系”的后裔,因此最低限度需要将其包含在查询中。 '“Relations.Children”' – WiredPrairie

+0

我也不明白为什么孩子和父母被存储在关系数组中,然后有一个额外的对象级别,而不是直接存储。 – WiredPrairie

+0

这是因为应该有可能为单个对象创建多个父 - 节 - 子关系。不是我说这是平常的,但正如我曾经在可以使用的场景中一样,我想以最简单的方式实现这一点。否则,你必须假装它,这可能是安静的杂乱。 –

回答

1

好吧,因为我发现解决方案感谢WiredPrairie我想我应该发布它。 该解决方案显然没有使用ElemMatch作为零件,而是像这样写入。

IMongoQuery searchQuery = Query.EQ("Relations.Parents.ParentList", objectID); 

非常感谢您对正确方向的帮助。

相关问题