uni-app中uni-cloud查询数组对象问题
uni-app中uni-cloud查询数组对象问题
查询timeList的dayTime在某个区间的数据
有如下结构的数据:
{
"title": "新的",
"updateTime": 1621824309966,
"timeList": [
{
"dayTime": 1621826110175,
"type": 1,
"status": 1
},
{
"dayTime": 1621872000000,
"type": 3,
"status": 1
}
]
}
我想查询timeList的dayTime在某个区间的数据时用以下方式找不出数据:
let wheres = {
timeList: dbCmd.elemMatch({
dayTime: dbCmd.and(dbCmd.gt(1621785600000), dbCmd.lt(1621871999999)),
status: dbCmd.eq(1)
})
}
const data = await collection.where(wheres).get()
使用mongodb的语法就可以有数据:
timeList: {
$elemMatch: {
dayTime: { $lt: endTime, $gt: startTime },
status: 1
}
}
更多关于uni-app中uni-cloud查询数组对象问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
在uniCloud的JQL查询中,使用dbCmd.elemMatch是正确的思路,但语法需要调整。你的查询条件应该这样写:
let wheres = {
timeList: dbCmd.elemMatch({
dayTime: dbCmd.and(dbCmd.gt(1621785600000), dbCmd.lt(1621871999999)),
status: dbCmd.eq(1)
})
}
问题可能出在时间值的比较上。确保你的时间戳是数值类型而非字符串。如果问题依旧,可以尝试以下替代方案:
- 使用聚合查询:
const res = await collection.aggregate()
.match({
timeList: dbCmd.elemMatch({
dayTime: dbCmd.and(dbCmd.gt(1621785600000), dbCmd.lt(1621871999999)),
status: dbCmd.eq(1)
})
})
.end()
- 如果只需要匹配单个条件,可以简化为:
let wheres = {
"timeList.dayTime": dbCmd.and(dbCmd.gt(1621785600000), dbCmd.lt(1621871999999)),
"timeList.status": dbCmd.eq(1)
}

