2013-02-07 52 views
0

我有独特的文件索引非唯一键。什么使得这个文件是唯一的,是文件中多个键的组合。例如:仅当多个匹配时才比较其他字段?

{ 
    first: 'John', 
    last: 'Foo' 
} 
{ 
    first: 'Henry', 
    last: 'Bar' 
} 
{ 
    first: 'Frank', 
    last: 'Foo' 
} 
{ 
    first: 'John', 
    last: 'Bar' 
} 

因此,根据上面的例子:如果我们想要查询的Frank头名,我们只会得到一个结果。理想情况下,由于我们只有一个结果,我们甚至不需要将姓氏与我们的查询进行比较。但是,如果我们查询名称为John,我们会得到两个结果,所以我们需要比较次要参数。

在Mongo中如何实现这种查询风格?目标只是为了节省不必要的比较,如果只有一场比赛开始。

请注意,我知道这种查询风格不保证正确的文档。它假定主要字段和每个后续字段匹配“足够好”来验证文档的身份,如果只有一个文档匹配,则为。虽然如果还有其他不太明显的原因,为什么不应该使用这种方法,通过一切手段讨论:)

+0

添加'limit(1)'和'sort()'参数的任何原因都不起作用? –

+0

如果找到多个匹配项,'limit(1)'不会匹配第二个/ etc参数,所以您将无法通过不正确的匹配进行筛选。至于'sort()',我不这么认为..虽然也许有一些用法,我不熟悉 –

+0

所以你试图阻止MongoDB检查'last ='Foo ''弗兰克'案中,纯粹是出于性能原因? – JohnnyHK

回答

0

我不会担心这一点,尤其是如果你有一个这样的指数。第一个,最后一个复合索引只会扫描以“first”开头的索引元素。如果这是一个文件,那么它停止。如果你还需要匹配“最后”,那么它将扫描索引的那些部分。

+0

>如果你还需要匹配“最后”,那么它将扫描索引的那些部分。 <听起来好像你在描述我提出的问题,以及另一种“完全比较”查询。你能举两个例子吗?或者,也许给我的名字/搜索你引用的查询类型? :) –

+0

“完全比较”查询在索引中根本不值得担心......我会尽力在周末提出一个很好的例子 – Derick

相关问题