当我需要用和子句分隔查询时,在猫鼬中有两个“或”子句[重复]
Posted
技术标签:
【中文标题】当我需要用和子句分隔查询时,在猫鼬中有两个“或”子句[重复]【英文标题】:having two "or" clauses in mongoose when I need to separate the query with an and clause [duplicate] 【发布时间】:2015-03-03 13:33:33 【问题描述】:我想在 mongo 中查询“我创建或收藏的未过期或常青(过期的帖子)帖子”
我的查询的问题是 mongoose 将 or 语句组合在一起,因此我错误地得到 (unexpired or evergreen or mine or bookmarked)
而不是 ( (unexpired or evergreen) and (mine or bookmarked) )
如何将猫鼬查询更改为我上面概述的后一种正确情况。我应该使用“and”子句...还是应该只做一个 not(expiration > now) ?
var query =
Invite.find( isActive:true )
.or([
'expiration': $gt: new Date() ,
'expiration' : null
])
.or([
createdBy:userId ,
'bookmarked.id' : userId
])
【问题讨论】:
【参考方案1】:您可以使用 Query#and
帮助器将两个 $or
子句放入一个 $and
中:
var query =
Invite.find( isActive:true )
.and([
$or: [
'expiration': $gt: new Date() ,
'expiration': null
],
$or: [
'createdBy': userId ,
'bookmarked.id' : userId
]
])
【讨论】:
【参考方案2】:这是我认为“帮助”方法并没有太大帮助的地方,因为它们会混淆问题。 javascript 是一种动态类型语言,因此您不需要这些辅助方法来定义构成查询的数据结构。 MongoDB 的所有本机运算符都在单个查询路径中被接受:
Invite.find(
"isActive": true,
"$and": [
"$or": [
"expiration": null ,
"expiration": "$gt": new Date()
],
"$or": [
"createdBy": userId
"bookmarked.id": userId
]
]
,
function(err,result)
);
【讨论】:
以上是关于当我需要用和子句分隔查询时,在猫鼬中有两个“或”子句[重复]的主要内容,如果未能解决你的问题,请参考以下文章