mongodb - updateMany(更改数据类型)用于数组中的重复嵌套字段
问题描述
这与我最近提出的一个问题有关,即更改 MongoDB 集合中字段的格式(请参阅此处)。
我现在想做同样的操作——即将以嵌套方式出现的 n 个字段的格式从字符串更改为日期时间。下面是一个例子:
{'_id': ObjectId('1234566'),
'id': '1234567',
'title': 'title',
'nickname': '',
'href': 'https://bla.blub',
'response_count': 114,
'date_created': datetime.datetime(2020, 9, 18, 9, 16),
'date_modified': datetime.datetime(2020, 10, 4, 16, 42),
'language': 'en',
'question_count': 10,
'responses':
[{'id': '1234567',
'recipient_id': '',
'collection_mode': 'default',
'response_status': 'completed',
'custom_value': '',
'first_name': '',
'last_name': '',
'email_address': '',
'ip_address': '192.168.0.1',
'logic_path': {},
'metadata': {'contact': {}},
'page_path': [],
'collector_id': '123456',
'survey_id': '123456',
'custom_variables': {'memref': '1234567'},
'total_time': 74,
'date_modified': '2020-09-19T10:02:33+00:00',
'date_created': '2020-09-19T10:01:19+00:00']}
在我的集合中,集合中有大约 30 个文档(每个文档都有一个_id
字段和与上面相同的字段,并且在每个文档中,我想将responses.$[array].date_modified
和responses.$[array].date_created
字段格式化为ISODate
(Mongo shell)或`datetime(PyMongo)。
这是我目前正在使用的代码:
db.collection.update_many(
{ [
{ "responses.$[elem].date_created": { "$type": "string" } }
]
},
[
{
"$set": {
"responses.$[elem].date_created": {
"$dateFromString": {
"dateString": "$responses.$[elem].date_created"
}
}
}
}
]
)
但这会产生以下错误(在 Pymongo 中):
WriteError: Invalid $set :: caused by :: FieldPath field names may not start with '$'., full error: {'index': 0, 'code': 16410, 'errmsg': "Invalid $set :: caused by :: FieldPath field names may not start with '$'."}
我还查阅了 MongoDB 手册中的这个条目,并尝试updateMany
相应地格式化我的声明,但在 MongoDB 方面我仍然有点菜鸟,所以我非常感谢一些帮助和/或解释为什么我的代码不起作用。提前谢谢了!
解决方案
推荐阅读
- node.js - GCP中长时间运行的查询CORS问题
- python - 为什么在本地类定义中的 `print` 语句之后分配给变量会更改打印值?
- php - |PHP新手| 我怎样才能将它安装到 php
- azure - 如何为同一租户中的所有订阅运行一个 Azure 自动化运行手册?
- python - 使用输入形状为 (192,192,3) 的 VGG16 进行微调时出现 InvalidArgumentError
- android - 在前台服务中使用 LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY 时是否有任何限制?
- java - 从java中的SQL解密数据
- maven - 如何在不依赖项目的情况下解决 maven pom 中工件的路径?
- scala - Why is override sometimes required for an abstract method?
- .htaccess - 如何使用 Htaccess 在 php 中将页面重写为带有 id 的基本 url