我目前的任務是研究數據庫,並嘗試使用pymongo庫來調查對給定項目的適用性的各種查詢。pymongo在綜合查詢中包含javascript
我的時間戳以毫秒整數格式保存,我想按日彙總查詢做一個簡單的銷售。我從here (answer by Alexandre Russel)瞭解到,由於時間戳未以BSON格式上傳,因此我無法使用日期和時間函數來創建垃圾箱,但可以使用嵌入式JavaScript處理時間戳。
因此我寫了下面的查詢:
[{
"$project": {
"year": {
"$year": {
"$add": ["new Date(0)", "$data.horaContacto"]
}
},
"month": {
"$month": {
"$add": ["new Date(0)", "$data.horaContacto"]
}
}
}
}, {
"$group": {
"_id": {
"year": "$year",
"month": "$month"
},
"sales": {
"$sum": {
"$cond": ["$data.estadoVenta", 1, 0]
}
}
}
}]
但得到這個錯誤:
pymongo.errors.OperationFailure: exception: $add only supports numeric or date types, not String
我認爲,什麼情況是,JS "new Date(0)"
正在被蒙戈駕駛員解釋一個字符串,不適用於js。如果我刪除封裝倒排雙引號,則Python會嘗試相應地解釋此代碼和錯誤。這只是一個例子,我希望在未來的測試中包含更多的js查詢,但是無法找到一種方式讓它能夠很好地與Python一起玩(據說我對Python也很陌生)。
是否有人知道:
- 我在假設錯誤出現正確,因爲蒙戈解釋 JS作爲一個字符串,並試圖直接概括?
- 如果我可以指示 mongo這是來自Python的JS,沒有Python試圖解釋 的代碼?
到目前爲止,我已經嘗試通過谷歌搜索和單引號和雙引號的各種組合。
粘貼下面是如果需要隨機生成的測試數據的幾行:
謝謝,
詹姆斯
{'_id': 0,'data': {'edad': '74','estadoVenta': True,'visits': [{'visitLength': 1819.349246663518,'visitNo': 1,'visitTime': 1480244647948.0}],'apellido2': 'Aguilar','apellido1': 'Garcia','horaContacto': 1464869545373.0,'preNombre': 'Agustin','_id': 0,'telefono': 630331272,'location': {'province': 'Aragón','city': 'Zaragoza','type': 'Point','coordinates': [-0.900203, 41.747726],'country': 'Spain'}}},
{'_id': 1,'data': {'edad': '87','estadoVenta': False,'visits': [{'visitLength': 2413.9938072105024,'visitNo': 1,'visitTime': 1465417353597.0}],'apellido2': 'Torres','apellido1': 'Acosta','horaContacto': 1473404147769.0,'preNombre': 'Sara','_id': 1,'telefono': 665968746,'location': {'province': 'Galicia','city': 'Cualedro','type': 'Point','coordinates': [-7.659321, 41.925328],'country': 'Spain'}}},
{'_id': 2,'data': {'edad': '48','estadoVenta': True,'visits': [{'visitLength': 2413.9938072105024,'visitNo': 1,'visitTime': 1465415138597.0}],'apellido2': 'Perez','apellido1': 'Sanchez','horaContacto': 1473404923569.0,'preNombre': 'Sara','_id': 2,'telefono': 665967346,'location': {'province': 'Galicia','city': 'Barcelona','type': 'Point','coordinates': [-7.659321, 41.925328],'country': 'Spain'}}}
感謝A.傑西Jiryu戴維斯,曾和我learn't。只需要調整'import pytz'並調整epoch就好''epoch = datetime.datetime.fromtimestamp(0,pytz.utc)' –