数据库schema是date类型 查询时提示 右值类型不正确
数据库schema是date类型 查询时提示 右值类型不正确
操作步骤:
{
"bsonType": "object",
"properties": {
"startDate": {
"bsonType": "date",
"description": "开始时间"
}
}
}
const dbCmd = db.command
const $ = dbCmd.aggregate
// db.collection('date-test').add({
// startDate: new Date()
// })
db.collection('date-test').where({
startDate: dbCmd.lte(new Date())
}).get()
预期结果:
查询结果
实际结果:
报错 右侧值类型不正确
bug描述:
{
"bsonType": "object",
"properties": {
"startDate": {
"bsonType": "date",
"description": "开始时间"
}
}
}
const dbCmd = db.command
const $ = dbCmd.aggregate
// db.collection('date-test').add({
// startDate: new Date()
// })
db.collection('date-test').where({
startDate: dbCmd.lte(new Date())
}).get()
提示<=类型不正确
查询时用时间戳不报错但是搜不出来
用getTemp 再联表查是正常的
6 回复
不会要倒闭吧,所有问题都石沉大海呢。。
时间字段的类型 bsonType 应该是 timestamp 代表时间戳, 不建议用 Date 类型, 数据库大于等于的判断作用于数值(number)类型 timestamp 本质就是number, 和string类型(按ASCII码大小比)
感谢解答,但是我看文档 https://doc.dcloud.net.cn/uniCloud/cf-database-dbcmd.html#dbcmd-compare 里说date可以用来比较呢
而且getTemp 是不报错的,联表查询也正常
回复 x***@126.com: 建议用时间戳,因为date有时区问题,特别是在阿里云和腾讯云那是0时区的
这个错误是因为在使用云数据库查询时,Date类型的比较需要特殊处理。正确的查询方式应该是:
- 对于直接比较Date对象,应该使用数据库的特定方法:
db.collection('date-test').where({
startDate: dbCmd.lte(new Date())
}).get()
- 如果仍然报错,可以尝试将Date转换为时间戳进行比较:
db.collection('date-test').where({
startDate: dbCmd.lte(Date.now())
}).get()
- 或者使用聚合操作中的日期处理:
db.collection('date-test').aggregate()
.match({
$expr: {
$lte: ["$startDate", new Date()]
}
})
.end()