2014-03-19 60 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”,因为你只把一个对象在数组中。