云数据库查询功能太渣了
发布于 3 年前 作者 pingzeng 1300 次浏览 来自 分享

最近要通过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
}

我想问下这么搞的目的是什么?

查询是通用查询,这样你还让我怎么搞?

一个时间过滤搞那么复杂,一个数据格式弄成套娃,难道就不能优化一下,让开发简单一些?

回到顶部