【发布时间】:2019-02-19 21:18:04
【问题描述】:
我有一个 mongo 集合,其中 _id 值是看起来像这样的文档:
{
"_id" :
{
"day" : ISODate("2019-02-19T00:00:00Z"),
"shift_id" : 3,
"venue_id" : 12345
}
}
由于 ISODate 值,我无法查询。特别是,当我使用 upsert: true 执行 replaceOne 时,我得到一个错误:
pymongo.errors.WriteError: After applying the update, the (immutable) field '_id' was found to have been altered to _id: { venue_id: 12346, shift_id: 13, day: new Date(1551052800000) }
在我看来问题在于 Date 对象彼此不相等,但我不确定我应该做些什么来帮助解决这个问题。
我总是使用 python 的 datetime.datetime(2019, 2, 19) 在我的 _id 中生成这些日期。
key = {
'venue_id': 12345,
'shift_id': 3,
'day': datetime.datetime(2019, 2, 19)
}
document['_id'] = key
collection.replace_one(
{'_id': key},
document,
upsert=True
)
【问题讨论】:
-
当您将
new Date(1551052800000)解析为 ISODate 时,它会返回ISODate("2019-02-25T00:00:00Z")(而不是ISODate("2019-02-19T00:00:00Z"))。也许仔细检查分配key值的代码,以确保它产生了您期望的结果。