仅在多个匹配时才比较其他字段?

时间:2013-02-07 20:45:29

标签: mongodb

我有由非唯一键索引的唯一文档。使该文档与众不同的是文档中多个键的组合。例如:

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

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

如何在Mongo中实现这种查询方式?如果只有一个匹配项,那么目标只是保存不必要的比较。

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

1 个答案:

答案 0 :(得分:0)

我根本不担心这一点,特别是如果你有一个索引。 first,last上的复合索引仅扫描以“first”开头的索引元素。如果那是一个文件,那么它就会停止。如果你还需要匹配“last”,那么它将扫描索引的那些部分。