Mongodb $not运算符未在查询中的$and运算符内工作
我想在以下条件下查询我的数据库,查询所有符合这些条件的记录:Mongodb $not运算符未在查询中的$and运算符内工作,mongodb,Mongodb,我想在以下条件下查询我的数据库,查询所有符合这些条件的记录: property是propertyID active为true 开始日期不大于Y endDate不小于X 我很难让MongoDB接受我的$match: $match:{ $and:[ { property : propertyID }, { active : true }, { $not: { start : {$gte: 1498780800 } } },
是property
propertyID
为active
true
不大于Y开始日期
不小于XendDate
$match
:
$match:{
$and:[
{ property : propertyID },
{ active : true },
{ $not: { start : {$gte: 1498780800 } } },
{ $not: { end : {$lte: 1497052800 } } }
]
}
现在我得到了错误:MongoError:未知的顶级运算符:$not
。您可能会说dodostartDate
小于X且endDate
小于Y,但这不起作用,因为startDate
可能大于X且endDate
小于Y,这是我想要的记录,等等。。这就是为什么那不起作用。我怎样才能解决这个问题
更新:
我的逻辑不正确,这就是我想做的
问题是,
$not
放错地方了。Per:
语法:{field:{$not:{}}
因此,$not
不应用作顶级运算符,字段应位于顶级
关于这个问题的逻辑方面。如果要选择开始
在限制日期之间的记录或结束
在限制日期之间的记录,则没有理由在此处使用$not
。此外,请确保您正在检查是否大于最小值和小于最大值,而不是相反。请尝试以下查询:
$match: {
$and: [
{ property: propertyID },
{ active: true },
{ $or: [
{ start: { $lte: 1498780800, $gte: 1497052800 } },
{ end: { $lte: 1498780800, $gte: 1497052800 } }
] }
]
}
这将检查
start
或end
是否在受限制的日期之间。我不明白您为什么不为该部分使用start:{$lt:149880800},end:{$gt:149752800}
。他们不应该这样做。您能否在注释中解释一下,并给出一个示例start
和end
值,说明它在哪里不起作用?或者将这些信息添加到你的问题中。@JohnnyHK我的错,我不是有意要摆脱它的。现在重新编辑。@johnyhk它真的很复杂,至少在我看来是这样。我似乎不能理解日期。让我制作一个图像,准确地显示我想要的东西。@AndrewLi你的修复确实有效,但我的逻辑是错误的。我会把我想做的事情放在一个图像上。