Python pymongo在聚合查询中包含javascript

Python pymongo在聚合查询中包含javascript,python,mongodb,pymongo,Python,Mongodb,Pymongo,我目前的任务是研究数据库,并尝试使用pymongo库进行各种查询,以调查给定项目的适用性 我的时间戳以毫秒整数格式保存,我想做一个简单的按日销售汇总查询。我从中了解到,由于时间戳不是以BSON格式上传的,我不能使用日期和时间函数来创建BIN,但可以使用嵌入式javascript操作时间戳 因此,我编写了以下查询: [{ "$project": { "year": { "$year": { "$add": ["new

我目前的任务是研究数据库,并尝试使用pymongo库进行各种查询,以调查给定项目的适用性

我的时间戳以毫秒整数格式保存,我想做一个简单的按日销售汇总查询。我从中了解到,由于时间戳不是以BSON格式上传的,我不能使用日期和时间函数来创建BIN,但可以使用嵌入式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
“newdate(0)”
被mongo驱动程序解释为字符串,而不是应用为js。如果我删除了封装的倒双引号,那么Python将尝试相应地解释此代码和错误。这只是一个示例,我希望在未来的测试中在查询中包含更多的js,但无法找到一种方法使其与Python配合使用(尽管如此,我对Python也相当陌生)

是否有人知道:

  • 我正确地假设发生错误是因为mongo解释 JS作为字符串并尝试直接求和
  • 如果我能指示 mongo这是来自Python的JS,Python没有试图解释 密码
到目前为止,我已经尝试过通过谷歌和各种单引号和双引号的组合进行搜索

下面粘贴了几行随机生成的测试数据(如果需要):

谢谢

詹姆斯


MongoDB聚合框架不能使用任何Javascript。必须使用BSON指定聚合管道中的所有数据。PyMongo可以将标准Python datetime转换为BSON,您可以将其作为聚合管道的一部分发送,如下所示:

import datetime

epoch = datetime.datetime.fromtimestamp(0)
pipeline = [{
    "$project": {
        "year": {
            "$year": {
                "$add": [epoch, "$data.horaContacto"]
            }
        },
        # the rest of your pipeline here ....
    }
}]

cursor = db.collection.aggregate(pipeline)

MongoDB聚合框架不能使用任何Javascript。必须使用BSON指定聚合管道中的所有数据。PyMongo可以将标准Python datetime转换为BSON,您可以将其作为聚合管道的一部分发送,如下所示:

import datetime

epoch = datetime.datetime.fromtimestamp(0)
pipeline = [{
    "$project": {
        "year": {
            "$year": {
                "$add": [epoch, "$data.horaContacto"]
            }
        },
        # the rest of your pipeline here ....
    }
}]

cursor = db.collection.aggregate(pipeline)

谢谢A.Jesse Jiryu Davis,工作过,我知道没有。唯一需要做的调整是包括导入pytz和调整epoch,例如,
epoch=datetime.datetime.fromtimestamp(0,pytz.utc)
谢谢A.Jesse Jiryu Davis,工作了,我知道没有。唯一需要的调整是包括导入pytz和调整epoch,例如
epoch=datetime.datetime.fromtimestamp(0,pytz.utc)