2012-01-07 135 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}}