Mongo 4.2错误输出阶段需要字符串参数,但找到了对象



我正在运行当前Mongo查询并得到这个错误:{"message": "$out阶段需要字符串参数,但发现对象"operationTime": Timestamp(1634539335, 2)","ok": 0,"code": 14,"codeName":"TypeMismatch"clusterTime&quot美元;: {"clusterTime": Timestamp(1634539335, 2)","signature": {"hash":"sP5j8mWdcjkUzZ3iHkg3obPhjMw =";"keyId":"6985187295267651587";}},"name":";MongoError"}

我使用这段代码早先复制到其他s3桶,没有问题。

有谁知道是什么问题吗?

var startDate = ISODate("2021-04-10");
var endDate = ISODate("2021-04-11");
var currDate = ISODate()
publishersId.forEach(publisherId =>
{
for (var d = startDate; d <= endDate; d.setDate(d.getDate() + 1)) {
print(publisherId + "_" + d);
db.direct_client_extended_alerts_dl.aggregate([
{
"$match":
{ "publisher_id":publisherId,"created_date": d}
},
{
"$out":
{
"s3": {
"bucket": "mongo-datalake-prod",
"filename": {
"$concat": [
"direct_client_extended_alerts/", {"$toString": "$publisher_id"}, "/",
{"$toString": "$created_date"}, "/",
{"$toString":currDate},"/"
]
}
}
}
}
],{ allowDiskUse: true })
}
}```

根据$out的官方文档:

从MongoDB 4.4开始,您可以指定输出数据库。

正如你所说,你正在使用MongoDB 4.2,该功能尚不支持。您可以考虑:

  1. 升级MongoDB
  2. 尝试使用$merge,看看是否有帮助
  3. 使用其他方法导出数据。

发现问题,我正在从我的PROD DB而不是从我的DATALAKE PROD DB运行查询。一旦我把它改为DATALAKE DB,它就运行了。