0

假设我有汽车收藏。我希望能够使用正则表达式搜索并找到我收藏中的汽车所拥有的不同品牌。

我知道

db.collection.find( { make: { $regex: 'chev', $options: 'i' } } );

将返回所有具有最接近(相同)匹配make的文档,然后是第二个最接近(相同)匹配make,然后是第三个等等。

如何构建查询,以便一旦正则表达式查询与 make 匹配,它就不会返回任何具有相同 make 的文档?

例如,我有以下文件:

{_id:1,make:"chevrolet"}
{_id:2,make:"chevrolet"} 
{_id:3,make:"Chevrolet"} 
{_id:4,make:"chevy"}
{_id:5,make:"chevy"}

我将如何查询集合以使其返回(大写不重要):

{_id:1,make:"chevrolet"}
{_id:4,make:"chevy"}
4

1 回答 1

1

在 2.2 的聚合框架中你可以做一个组:

$db->col->aggregate(array(
    array('$match' => array('make' => new MongoRegex('/chev/i'))),
    array('$group' => array('_id' => '$make'))
));

_id由于在分组时从集合中返回并没有多大意义,这实际上会返回:

{_id: 'chevy'},
{_id: 'chevrolet'}
于 2013-01-06T00:56:42.123 回答