我在一个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)
}
}
]
答案 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”,因为您只在数组中放置一个对象。