最近要通过HTTP API查询数据,集合中有个日期字段,查询要按这个字段过滤。
先是时间过滤问题,第一种:
db.collection("Album").where({
crdate: db.command.gt(db.command.aggregate.dateFromString({
dateString: "2020-12-31T05:52:21.634Z"
}))
}).get()
查不出数据,失败!
第二种:
db.collection("Album").aggregate().match({
crdate: db.command.gt(db.command.aggregate.dateFromString({
dateString: "2020-12-31T05:52:21.634Z"
}))
}).end()
还是查不出数据,失败!
经过改造,第三种:
db.collection("Album").aggregate().addFields({
mt: db.command.aggregate.gt(["$crdate", db.command.aggregate.dateFromString({
dateString: "2020-12-31T05:52:21.634Z"
})])
}).match({
mt: true
}).project({
mt: 0
}).end()
终于可以查出数据了!
接着换成后台来调用查询,用的databasequery,能查出数据,也有分页信息,但是,过滤条件起不到作用!
然后我又找了一圈文档,发现了databaseaggregate这个接口,查询结果正常,但是,分页信息没了!数据格式也变了!数字和时间一层套一层:
{
"_id": "e62469b25fcf1b53011a84cd05b31e3a",
"pub_date": "2020-10-10",
"score": {
"$numberDouble": "0.0"
},
"title": "Moonglow",
"crdate": {
"$date": {
"$numberLong": "1607423587514"
}
},
"publish": true
}
我想问下这么搞的目的是什么?
查询是通用查询,这样你还让我怎么搞?
一个时间过滤搞那么复杂,一个数据格式弄成套娃,难道就不能优化一下,让开发简单一些?