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在复合索引上添加$or将使cpu崩溃_Mongodb - Fatal编程技术网

MongoDB在复合索引上添加$or将使cpu崩溃

MongoDB在复合索引上添加$or将使cpu崩溃,mongodb,Mongodb,如果我取消注释$or中的状态,它将使cpu从0.3%突发到300% 这是在此集合上设置的索引:userId:1,timestamp:1,status:1 如果我尝试在没有$or的情况下查找:{status:“Active”} 它不会破裂,也不会引起任何问题 为什么会这样? 当使用$or对同一字段的值进行相等检查时,请使用$in运算符而不是$or运算符 explain对您的两个查询和使用$in的新方法都有帮助。您能对两个查询运行explain吗?请参阅我删除索引时问题已解决。这就像是索引造成了冲

如果我取消注释$or中的状态,它将使cpu从0.3%突发到300%

这是在此集合上设置的索引:userId:1,timestamp:1,status:1

如果我尝试在没有$or的情况下查找:
{status:“Active”}

它不会破裂,也不会引起任何问题

为什么会这样?

当使用$or对同一字段的值进行相等检查时,请使用$in运算符而不是$or运算符


explain
对您的两个查询和使用
$in
的新方法都有帮助。

您能对两个查询运行
explain
吗?请参阅我删除索引时问题已解决。这就像是索引造成了冲突或其他什么,你需要索引来加快你的查询速度。您重新创建了它们吗?使用Promise.all一次运行了68个查询,而且由于我已经删除了它们,因此不再出现cpu崩溃-因此我在评论中所说的是错误的。我带回了那些被删除的实体,并把这个索引放回原处。为什么它会使cpu崩溃?你能告诉我是否使用索引扫描了文档吗?我已经将存储这68个实体的备份放在一个快照上运行了这个命令-不可能是突发的,而且只执行一个查询需要1115毫秒-这是很长的时间。我错过了什么?得到:TotalKeysInspected:95904和TotalDocksInspected:5是的,这是有道理的。如果每个查询都必须这样做,那么它必须进行大量的页面交换,这可能会导致这种情况。
const d = new Date().getTime()+(1200*1000);
    const query = {
      userId: ObjectId(userId),
      timestamp: {
        $lte: d
      },
      $or: [
        // {
        //   status: "Active"
        // },
        // {
        //   status: "Removed"
        // }
      ]
    }
    Db.orders.findOne(query, () => {
      console.log(`[1]:`, 1)
      return resolve();
    })