使用自引用对象在集合中搜索

时间:2011-11-25 12:29:18

标签: mongodb

我有一个集合:

{
_id - ObjectId
name - string
location - string
..
parentId - ObjectId //link to parent object
}

我有一个过滤器查询,即使使用int值(在C#中)也很好用:

var q = Query.Matches(column, new BsonRegularExpression(string.Format("/^{0}/i", name)));

如何按父对象的名称进行搜索?当然,使用LINQ,没有问题,但是可以在服务器端进行搜索吗?

2 个答案:

答案 0 :(得分:5)

MongoDB中没有连接,但您基本上有两个选项:

解决方案1:

  1. 按名称查询并获取结果(父母)
  2. 对于提取的每个文档,再次查询并获取_idparentId匹配的所有文档(子项)
  3. 解决方案2:

    除了parentId之外,还可以直接为name

    保存父文件parentName的名称与每个文档和查询

答案 1 :(得分:2)

无法通过mongodb中的引用对象字段进行搜索。一般来说monogdb不是关系数据库,所以在我看来它根本不应该支持任何关系。

有一种众所周知的方法是创建额外的字段并存储(非规范化)有关您想搜索的内容的信息。

因此,请按照以下方式更改您的架构以搜索父对象名称:

{
_id - ObjectId
name - string
location - string
..
parentId - ObjectId //link to parent object,
parentName
}

你应该理解的主要想法:mongodb不是真实的,没有加入,没有关系。