2014-03-19 57 views
0

我在一個Node.js帆應用程序0.10-rc4與水線mongoDB(風帆mongo適配器),我有一個model.where標準條件,效果很好:帆線水線標準「複雜」條件

   or: 
       [ 
        { 
         start: 
         { 
          '>': new Date(parseInt(req.param('start'))*1000), 
          '<': new Date(parseInt(req.param('end'))*1000) 
         }, 
         end: 
         { 
          '>': new Date(parseInt(req.param('start'))*1000), 
          '<': new Date(parseInt(req.param('end'))*1000) 
         } 
        } 
       ] 

...但我想添加就可以了例外,在算法中的東西,就像是:

 (
      (startq > startparam AND startq < endparam) 
      OR 
      (endq > startparam AND endq < endparam) 
    ) 
     OR 
     (
      (startq < startparam AND endq > endparam)    
    ) 

...但它似乎我們不能使用超過一個或多個?

   or: 
       [ 
        { 
         start: 
         { 
          '>': new Date(parseInt(req.param('start'))*1000), 
          '<': new Date(parseInt(req.param('end'))*1000) 
         }, 
         end: 
         { 
          '>': new Date(parseInt(req.param('start'))*1000), 
          '<': new Date(parseInt(req.param('end'))*1000) 
         }, 
         { 
          start: 
          { 
           '<': new Date(parseInt(req.param('start'))*1000) 
          }, 
          end: 
          { 
           '>': new Date(parseInt(req.param('end'))*1000) 
          } 
         } 

        } 
       ] 

我已經嘗試過很多辦法(與無支架)...

   or: 
       [ 
        { 
         { 
          or: 
          [ 
           { 
            start: 
            { 
             '>': new Date(parseInt(req.param('start'))*1000), 
             '<': new Date(parseInt(req.param('end'))*1000) 
            }, 
            end: 
            { 
             '>': new Date(parseInt(req.param('start'))*1000), 
             '<': new Date(parseInt(req.param('end'))*1000) 
            } 
           } 
          ] 
         }, 
         { 
           start: 
           { 
            '<': new Date(parseInt(req.param('start'))*1000) 
           }, 
           end: 
           { 
            '>': new Date(parseInt(req.param('end'))*1000) 
           } 
         } 
        } 
       ] 

...沒有一個能用的,最讓我有時間:

 SyntaxError: Unexpected token { 

該文檔沒有關於該語法的示例,有辦法做到這一點?

編輯:

THX斯科特,這裏是不錯的語法:

   or: 
       [ 
        { 
         start: 
         { 
          '>': new Date(parseInt(req.param('start'))*1000), 
          '<': new Date(parseInt(req.param('end'))*1000) 
         } 
        }, 
        { 
         end: 
         { 
          '>': new Date(parseInt(req.param('start'))*1000), 
          '<': new Date(parseInt(req.param('end'))*1000) 
         } 
        }, 
        { 
         start: 
         { 
          '<': new Date(parseInt(req.param('start'))*1000) 
         }, 
         end: 
         { 
          '>': new Date(parseInt(req.param('end'))*1000) 
         } 
        } 
       ] 

回答

1

的第二個兩個例子都不是有效的JSON,因爲它們包含嵌套的對象,而不鍵。這就是爲什麼你會得到語法錯誤。

or鍵將(或有效的JSON對象形式的)數組以「或」的形式組合在一起。嘗試:

  or: 
      [ 
       { 
        start: 
        { 
         '>': new Date(parseInt(req.param('start'))*1000), 
         '<': new Date(parseInt(req.param('end'))*1000) 
        }, 
        end: 
        { 
         '>': new Date(parseInt(req.param('start'))*1000), 
         '<': new Date(parseInt(req.param('end'))*1000) 
        } 
       }, 
       { 
        start: 
        { 
         '<': new Date(parseInt(req.param('start'))*1000) 
        }, 
        end: 
        { 
         '>': new Date(parseInt(req.param('end'))*1000) 
        } 
       } 
      ] 

注意,原來的(工作),例如是不是真的做一個「OR」,因爲你只把一個對象在數組中。