can‘t convert from BSON type long to Date

博客内容涉及MongoDB查询中遇到的问题,原始查询因尝试将long类型的createTime转化为date导致错误。通过逐步优化,尝试使用`new Date($createTime)`和`$add[new Date(0),$createTime]`进行转换,但结果仍不正确。问题在于如何正确地将long类型的字段转换为date类型以用于聚合查询中的$year操作。
{
    $project: {
        year: {
            $year: "$createTime"
        },
        _id: 1,
        createTime: 1
    }
}

以上语句在查询mongodb时报错:can't convert from BSON type long to Date,截图如下:
在这里插入图片描述
原因:数据库存储的createTime为long类型,而project语句需要一个date类型,优化如下:

{
  year:{
    $year: new Date("$createTime")
  },
  _id:1,
  createTime:1
}

执行结果截图如下:
在这里插入图片描述
很明显,转化后的year字段存在错误。
继续优化如下:

{
  year:{
    $year: {
      "$add":[new Date(0),"$createTime"]
    }
  },
  _id:1,
  createTime:1
}

查询结果:
在这里插入图片描述

运行rs.status() 输出:{ set: 'rs0', date: 2025-09-17T03:47:39.680Z, myState: 1, term: Long('5'), syncSourceHost: '', syncSourceId: -1, heartbeatIntervalMillis: Long('2000'), majorityVoteCount: 1, writeMajorityCount: 1, votingMembersCount: 1, writableVotingMembersCount: 1, optimes: { lastCommittedOpTime: { ts: Timestamp({ t: 1758080854, i: 1 }), t: Long('5') }, lastCommittedWallTime: 2025-09-17T03:47:34.569Z, readConcernMajorityOpTime: { ts: Timestamp({ t: 1758080854, i: 1 }), t: Long('5') }, readConcernMajorityWallTime: 2025-09-17T03:47:34.569Z, appliedOpTime: { ts: Timestamp({ t: 1758080854, i: 1 }), t: Long('5') }, durableOpTime: { ts: Timestamp({ t: 1758080854, i: 1 }), t: Long('5') }, lastAppliedWallTime: 2025-09-17T03:47:34.569Z, lastDurableWallTime: 2025-09-17T03:47:34.569Z }, lastStableRecoveryTimestamp: Timestamp({ t: 1758080794, i: 1 }), electionCandidateMetrics: { lastElectionReason: 'electionTimeout', lastElectionDate: 2025-09-16T10:15:49.919Z, electionTerm: Long('5'), lastCommittedOpTimeAtElection: { ts: Timestamp({ t: 0, i: 0 }), t: Long('-1') }, lastSeenOpTimeAtElection: { ts: Timestamp({ t: 1758017622, i: 1 }), t: Long('4') }, numVotesNeeded: 1, priorityAtElection: 1, electionTimeoutMillis: Long('10000'), newTermStartDate: 2025-09-16T10:15:49.938Z, wMajorityWriteAvailabilityDate: 2025-09-16T10:15:50.039Z }, members: [ { _id: 0, name: 'localhost:27111', health: 1, state: 1, stateStr: 'PRIMARY', uptime: 63111, optime: [Object], optimeDate: 2025-09-17T03:47:34.000Z, lastAppliedWallTime: 2025-09-17T03:47:34.569Z, lastDurableWallTime: 2025-09-17T03:47:34.569Z, syncSourceHost: '', syncSourceId: -1, infoMessage: '', electionTime: Timestamp({ t: 1758017749, i: 1 }), electionDate: 2025-09-16T10:15:49.000Z, configVersion: 1, configTerm: 5, self: true, lastHeartbeatMessage: '' } ], ok: 1, '$clusterTime': { clusterTime: Timestamp({ t: 1758080854, i: 1 }), signature: { hash: Binary.createFromBase64('AAAAAAAAAAAAAAAAAAAAAAAAAAA=', 0), keyId: Long('0') } }, operationTime: Timestamp({ t: 1758080854, i: 1 }) }
09-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值