如何在sails-dynamodb中实现OR条件查询?
在sails-dynamodb中执行OR条件查询的正确方式
首先得指出你代码里的关键问题:同一个JavaScript对象中不能有重复的键,你写的{ title: { contains: 'P' }, title: {contains: 'p'} }会被自动覆盖成{ title: {contains: 'p'} },第二个对象同理,这就导致你的OR逻辑完全不符合预期。
根据你的需求,我分两种情况给出正确的写法:
情况1:匹配「title含P/p 或 description含P/p」
如果是要查询所有满足title包含P或p,或者description包含P或p的记录,需要把单个字段的多条件也用嵌套的or包裹:
let query = { where: { or: [ // title包含P 或 title包含p { or: [{ title: { contains: 'P' } }, { title: { contains: 'p' } }] }, // description包含P 或 description包含p { or: [{ description: { contains: 'P' } }, { description: { contains: 'p' } }] } ] }, sort: "1" };
情况2:匹配「(title含P 且 description含P) 或 (title含p 且 description含p)」
如果你的需求是两组组合条件的OR(比如同时匹配大小写一致的title和description),那写法是这样的:
let query = { where: { or: [ { title: { contains: 'P' }, description: { contains: 'P' } }, { title: { contains: 'p' }, description: { contains: 'p' } } ] }, sort: "1" };
额外优化建议
DynamoDB的contains操作是区分大小写的,如果你只是想实现大小写不敏感的模糊匹配,更高效的方式是:
- 存储数据时,把
title和description字段统一转换为小写(或大写)存入数据库 - 查询时直接用小写(或大写)的关键词,比如
{ title: { contains: 'p' } },这样就能匹配所有包含P或p的内容,无需写多个OR条件,性能更好。
内容的提问来源于stack exchange,提问作者Gustavo García González
相关产品推荐
相关产品推荐

