问题描述
我正在尝试解决 this page 上的 Q.22。数据集是 here
Q.22 编写 MongoDB 查询以查找那些在 ISODate“2014-08-11T00:00:00Z”中获得“A”等级并获得 11 分的餐厅的餐厅 ID、名称和等级调查日期
数据格式如下:
[
{
"_key": "2451925","_id": "restaurants/2451925","_rev": "_buC4Kd2---","address": {
"building": "1007","coord": [
-73.856077,40.848447
],"street": "Morris Park Ave","zipcode": "10462"
},"borough": "bronx","cuisine": "Bakery","grades": [
{
"date": {
"$date": 1393804800000
},"grade": "A","score": 2
},{
"date": {
"$date": 1378857600000
},"score": 6
},{
"date": {
"$date": 1358985600000
},"score": 10
},{
"date": {
"$date": 1322006400000
},"score": 9
},{
"date": {
"$date": 1299715200000
},"grade": "B","score": 14
}
],"name": "Morris Park Bake Shop","restaurant_id": "30075445"
},{
"_key": "2451926","_id": "restaurants/2451926","_rev": "_buC4Kd2--A","address": {
"building": "469","coord": [
-73.961704,40.662942
],"street": "Flatbush Avenue","zipcode": "11225"
},"borough": "brooklyn","cuisine": "Hamburgers","grades": [
{
"date": {
"$date": 1419897600000
},"score": 8
},{
"date": {
"$date": 1404172800000
},"score": 23
},{
"date": {
"$date": 1367280000000
},"score": 12
},{
"date": {
"$date": 1336435200000
},"score": 12
}
],"name": "Wendy'S","restaurant_id": "30112340"
}]
我正在尝试使用上面给定的 ISODate 过滤掉日期。我正在使用 date_timestamp 函数将上述内容转换为日期在数据中的存储方式。
我无法过滤日期,因为它们似乎包含在 {"$date":1393804800000} 中。在 g 中尝试循环表示找到的是对象而不是集合或数组。应用过滤器并检查与 date_timestamp() 的相等性将返回空数组 [],[] 等。
for r in restaurants
for g in r.grades
let d=date_timestamp("2014-08-11T00:00:00Z")
return {date:g.date,target_date:d}
请帮忙,谢谢
解决方法
您必须过滤对象内的字段:
LET target_date = DATE_TIMESTAMP('2014-08-11T00:00:00Z')
FOR r IN restaurants
FOR g IN r.grades
FILTER g.date.$date == target_date
RETURN {date: g.date}