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