Mongodb mongdb匹配当某些变量存在时,如果它不存在,则不与它匹配

Mongodb mongdb匹配当某些变量存在时,如果它不存在,则不与它匹配,mongodb,mongoose,Mongodb,Mongoose,当设备_id存在时,我希望与之匹配,但当它不存在时(它为空),我希望不使用它进行匹配。你有什么好建议吗 现在,我正在处理这个问题 let list = await TDataModel.aggregate([ { $match: { device_id, createdAt: { $gte: startTime, $lte: endTime } } }, { $sort: { createdAt: -1 } } ]) 即使它可以解

当设备_id存在时,我希望与之匹配,但当它不存在时(它为空),我希望不使用它进行匹配。你有什么好建议吗

现在,我正在处理这个问题

let list = await TDataModel.aggregate([
  {
    $match: {
      device_id,
      createdAt: { $gte: startTime, $lte: endTime }
    }
  },
  {
    $sort: { createdAt: -1 }
  }
])

即使它可以解决我的问题,但我认为一定有更好的方法

您可以创建一个变量并将您的条件存储在其中

  • 已创建
    match
    变量,如果
    device\u id
    不为空,则添加匹配变量

您可以创建一个变量并在其中存储条件

  • 已创建
    match
    变量,如果
    device\u id
    不为空,则添加匹配变量

你所做的很好,但是我们可以通过操作符中的一些糖语法使它更性感一些


你所做的很好,但是我们可以通过操作符中的一些糖语法使它更性感一些


首先谢谢你,是的,这是一个更好的方法,它也可以解决我的问题,但我正在考虑我们是否可以在$match中编写一些表达式我不认为这是更好的方法,因为它会影响查询处理和获取记录时的条件检查时间。首先谢谢你,是的,这是一个更好的方法,这也可以解决我的问题,但我正在考虑我们是否可以在$match中编写一些表达式。我不认为这是更好的方法,因为它会影响查询处理和获取记录时的条件检查时间。这是我想要的结果。我要更改它,设备id?{device\u id}:{},它能工作,非常感谢你这是我想要的结果我要更改它,device\u id?{device_id}:{},它可以工作,非常感谢
let list = []
if (device_id) {
list = await TDataModel.aggregate([
      {
        $match: {
          device_id,
          createdAt: { $gte: startTime, $lte: endTime }
        }
      },
      {
        $sort: { createdAt: -1 }
      }
    ])
} else {
list = await TDataModel.aggregate([
      {
        $match: {
          createdAt: { $gte: startTime, $lte: endTime }
        }
      },
      {
        $sort: { createdAt: -1 }
      }
    ])
}
let match = { createdAt: { $gte: startTime, $lte: endTime } };
if (device_id) match.device_id = device_id;

let list = await TDataModel.aggregate([
  { $match: match },
  { $sort: { createdAt: -1 } }
])
let list = await TDataModel.aggregate([
    {
        $match: {
            $and: [
                device_id ? device_id : {},
                {
                    createdAt: { $gte: startTime, $lte: endTime }
                }
            ]
        }
    },
    {
        $sort: { createdAt: -1 }
    }
])