我正在使用 mongodb,并且我已经构建了以下查询。
1 AccessToken.where('resource_owner_id').equals(event.resource_owner_id)
2 .where('revoked_at').equals(undefined)
3 .or([ { scopes: /resources/i }, { scopes: new RegExp(event.resource,'i') } ])
4 .or([ { device_ids: [] }, { device_ids: event.body.id } ])
对于这个例子,我使用的是 Mongoose 和 coffescript。
不幸的是,它不能按我的意愿工作,主要是为了or
声明。我想要的是or
第 3 行和第 4 行的两个是独立的。
这意味着字段scopes
(第 3 行)必须包含字符串resources
或存储在 event.resource 中的字符串,同时该字段device_ids
必须为空或包含 id event.body.id
。
从我准备的测试中,我可以看到该or
命令将所有内容放在一起。这意味着当仅满足四个 or 条件之一时,我将获得该文档。
- { scopes: /resources/i }
- { scopes: new RegExp(event.resource,'i') }
- { device_ids: [] }
- { device_ids: event.body.id }
我无法达到的是将它们分成两组,以便同时满足与该领域相关scopes
的条件和与该领域相关的条件device_ids
。
希望问题得到很好的描述。谢谢。