0

我在 mongoDB(sails-mongo 适配器)上使用 Waterline 的 Node.js Sails 应用程序 0.10-rc4,并且我有一个运行良好的 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 ?

                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 {

文档没有关于该语法的示例,有办法吗?

编辑:

感谢 Scott,这是很好的语法:

                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)
                        }
                    }
                ]
4

1 回答 1

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”,因为您只是将一个对象放入数组中。

于 2014-03-19T18:28:59.187 回答