航行水线标准"复杂"条件

时间:2014-03-19 17:32:36

标签: node.js criteria sails.js waterline

我在一个Node.js Sails app 0.10-rc4上使用mongoDB上的Waterline(sails-mongo适配器),我是一个模型。其中标准条件运行良好:

                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?

                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 {

文档上没有关于该语法的示例,有一种方法可以做到吗?

修改

对斯科特来说,这是一个很好的语法:

                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 个答案:

答案 0 :(得分: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”,因为您只在数组中放置一个对象。