2012-01-07 149 views
1

好吧这一个是杀了我。也许它迟到了,我忘记了一些东西,但这应该起作用。

出于测试目的,我的收藏中有大约6000个文档。有一个名为Priority的属性,在每个实例中它的值都是2。

以下两个查询都返回所有 6000文件:

{ 
    Priority: { 
     $gt: 1 
    } 
} 

{ 
    Priority: { 
     $lt: 10 
    } 
} 

这个查询,但是,返回0的结果,并根据解释,做的全扫描全部6000个文件:

{ 
$and: [ 
     { 
      Priority: { 
       $gt: 1 
      } 
     }, 
     { 
      Priority: { 
       $lt: 10 
      } 
     } 
    ] 
} 

有我错过了什么?

+0

再次,用了不到100点的用户巨魔互联网留下无用的意见和贡献什么。当然,我阅读文档。不过,感谢您的帮助。 – 2012-01-07 15:22:41

回答

4

如果我说“我需要一个可以坐四个人的汽车和一辆可以坐8人以上的汽车的人”,那么坐在8个人身上的单车的人通常不会被理解为符合要求。你查询只能通过一个入口与优先值,小于10一个,比1

docs for and更大的一个满足有一个链接到的MongoDB的multikey semantics

+1

不错的例子! :-) – 2012-01-07 05:08:50

+0

好吧 - 它有点误导,但我明白你在说什么。我简化了我在这个问题中的实际问题,期待不同的答案。我可能会创建一个更详细的新问题。谢谢。 – 2012-01-07 05:34:33

+0

如果你可以帮忙,我已经发布了一个后续问题:http://stackoverflow.com/questions/8767747/combine-two-or-statements – 2012-01-07 05:59:57

2

您不应该在这里使用$and

相反,你可以重写查询是这样的:

{Priority: {$gt: 1, $lt: 10}}