Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb $not运算符未在查询中的$and运算符内工作_Mongodb - Fatal编程技术网

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
  • endDate
    不小于X
我很难让MongoDB接受我的
$match

$match:{
    $and:[
        { property : propertyID },
        { active   : true },
        { $not: { start : {$gte: 1498780800 } } },
        { $not: { end   : {$lte: 1497052800 } } }
    ]
}
现在我得到了错误:MongoError:未知的顶级运算符:
$not
。您可能会说dodo
startDate
小于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你的修复确实有效,但我的逻辑是错误的。我会把我想做的事情放在一个图像上。