Mongodb根据日期查询
Posted
技术标签:
【中文标题】Mongodb根据日期查询【英文标题】:Mongodb query according to dates 【发布时间】:2020-04-17 08:29:34 【问题描述】:您好,我正在尝试查找仅在 D-1 天保存的文档
问题:我将在 24 小时内创建所有文档,但我想根据创建它的 id 获取它们
//这是我的代码
exports.getPreviousDayOrder = async (req,res,next) =>
vendorId=req.params.id
let d= new Date()
let pdate =d.getDate()-2
let month = d.getMonth()+1
let year = d.getFullYear()
previousDay= `$year-$month-$pdateT00:00:00.000Z`
currentDay= Date.now
const vendorOrder = await Order.find(vendorId,createdDate:$gt:previousDay,$lt:currentDay)
try
if (!vendorOrder)
const error = new Error('Could not find Order.')
error.statusCode = 404;
throw error;
res.status(200).json(message:'VendorOrder fetched.',vendorOrder)
catch(error) res.send(error)
next(error)
这是我从邮递员那里得到的回复——一个空文档
"message": "VendorOrder fetched.",
"vendorOrder": []
我尝试过的其他查询
const vendorOrder = await Order.find(createdDate:$gt:previousDay,$lt:currentDay)
它提供所有文档,每个供应商 ID 都是在 D-1 日创建的
如果我从我的路由中删除 :/id
,那么我将获取所有带有登录 ID 的文档,因为存在令牌身份验证。
【问题讨论】:
【参考方案1】:这假定 vendorId
是 MongoDB 中文档的 id
。您需要使用ObjectId(...)
投射id
。 try/catch 也需要包含 find ,否则不会捕获数据库错误。
try
const vendorOrder = await Order.find(
vendorId:mongoose.Types.ObjectId(req.params.id),
createdDate:$gt:previousDay,
createdDate:$lt:currentDay
)
if (!vendorOrder)
const error = new Error('Could not find Order.')
error.statusCode = 404;
throw error;
res.status(200).json(message:'VendorOrder fetched.',vendorOrder)
catch(error) res.send(error);next(error)
更多示例:https://***.com/a/38455992/238847
MondoDB 对象 ID:https://mongodb.github.io/node-mongodb-native/2.0/tutorials/objectid/
【讨论】:
谢谢斯坦,我试过你的答案,但它返回空文档,我认为我从 nodejs 查询日期与保存在 Mongo 中的日期的方式有些不匹配,如果你能提出任何建议以上是关于Mongodb根据日期查询的主要内容,如果未能解决你的问题,请参考以下文章