【问题标题】:sails Waterline criteria "complex" conditions帆 水线标准“复杂”条件
【发布时间】:2014-03-19 17:32:36
【问题描述】:

我在 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)
                            }
                        }

                    }
                ]

我尝试了很多方法(带of不带括号)...

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

【问题讨论】:

    标签: node.js criteria sails.js waterline


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2013-11-22
      • 1970-01-01
      相关资源
      最近更新 更多