Doctrine MongoDB map减少参考文档

时间:2016-03-10 07:31:20

标签: php mongodb doctrine doctrine-odm

这可能与我提出的另一个问题here重复,但我试图从不同角度处理它与Mongo map reduce and think

场合

我有两个文件

Content
    id - ID
    title - String
    contentType - Reference One Tag
    audienceType - Reference One Tag

Tag
    id - ID
    title - String
    type - String

我使用Tag作为所有各种元信息的存储库并按类型拆分,因此Content-contentType的内容是类型为“content-type”的标签,Content-audienceType的内容是标记为“受众类型”的标记。

标签是分层的,但只能通过使用连字符,因此,使用内容类型作为示例,标题可能是:

action
action - swordplay
action - spy
action - space
romance
romance - historical
romance - historical - boy/girl
romance - historical - boy/boy
romance - historical - girl/girl
romance - modern
romance - modern - boy/girl
romance - modern - boy/boy
romance - modern - girl/girl

问题

我希望能够提供标题的一部分(如果有帮助也会编入索引)并查找属于该“组”的所有条目。例如

如果搜索“action”,查询将返回引用的所有文档:

action
action - swordplay
action - spy
action - space

如果寻找“浪漫 - 现代”。查询将返回所有引用的文档:

romance - modern
romance - modern - boy/girl
romance - modern - boy/boy
romance - modern - girl/girl

示例文档

根据评论中的要求,这里有一些简化的例子:

content
{
_id:  ObjectId(1),
title: "Film A",
contentType: ObjectId(11)
audienceType: ObjectId(21)
}
{
_id:  ObjectId(2),
title: "Film B",
contentType: ObjectId(12)
audienceType: ObjectId(21)
}
{
_id:  ObjectId(3),
title: "Film C",
contentType: ObjectId(12)
audienceType: ObjectId(21)
}

Tag
{
_id:  ObjectId(11),
title: "romance - historical",
type: "content-type"
}
{
_id:  ObjectId(12),
title: "romance - historical - boy/girl",
type: "content-type"
}
{
_id:  ObjectId(21),
title: "adults",
type: "audience-type"
}

尝试

因为查询是使用Doctrine构建的,所以它也是在PHP中,所以我可以手动将搜索值放在map reduce函数中。不知道这是不是这样的方式

/* Manually setting the value so that it can make sense in question. This should return all the records */
$searchTitle = 'romance - historical';
$queryBuilder
->where('function() {
    return this.contentType.title.search("'.$searchTitle.'");
}');

当我执行上述操作时,Doctrine(通过结果例外)总是抱怨我正在尝试搜索的内容未定义。请有人赐教,MapReduce对我来说是一碗全新的鱼

0 个答案:

没有答案