Mongodb 从mongo获取datetime并将其推送到数组中
我有以下道具的文件:Mongodb 从mongo获取datetime并将其推送到数组中,mongodb,pymongo,Mongodb,Pymongo,我有以下道具的文件: { 'published_date': '2020/03/10 07:20:09', 'relationships': [ {'rel_name': 'HAS_REL'}, {'rel_name': 'HAS_NO_REL'}, ] } 我想在关系的每个字段中添加asrel\u name的值has\u rel发布日期的值作为属性dict。文档将如下所示: { 'published_date': '2020/03/10
{
'published_date': '2020/03/10 07:20:09',
'relationships': [
{'rel_name': 'HAS_REL'},
{'rel_name': 'HAS_NO_REL'},
]
}
我想在关系
的每个字段中添加asrel\u name
的值has\u rel发布日期的值作为属性dict。文档将如下所示:
{
'published_date': '2020/03/10 07:20:09',
'relationships': [
{ 'rel_name': 'HAS_REL'
'date': 2020,03,10,07,20,09
},
{'rel_name': 'HAS_NO_REL'},
]
}
TEST_COLLECTION.update_one(
{'_id': ObjectId(document_id)},
[
{'$set': {
'relationships': {
'$let': {
'vars': {
'date': { '$dateFromString': { 'dateString': '$published_date', format: "%Y/%m/%d %H:%M:%S" } }
},
'in': {
'$map': {
'input': "$relationships",
'in': {
'$cond': {
'if': { '$eq': ["$$this.rel_name", "HAS_REL"] },
'then': { '$mergeObjects': ["$$this", { 'date': "$$date" }] },
'else': "$$this"
}
}
}
}
}
}
}
}
]
)
到目前为止,我的查询如下所示:
TEST_COLLECTION.update_one(
{'_id': ObjectId(document_id)},
{'$set': {'relationships.$[elem].date': {'$dateFromString': '$published_date'}}},
False,
False,
None,
[{'elem.rel_name': 'HAS_RELATIONSHIP'}],
)
但我得到了一个错误:
WriteError: The dollar ($) prefixed field '$dateFromString' in 'parsed.relationships.1.date.$dateFromString' is not valid for storage.
有什么想法吗
更新
使用初始答案,我更新了查询,如下所示:
{
'published_date': '2020/03/10 07:20:09',
'relationships': [
{ 'rel_name': 'HAS_REL'
'date': 2020,03,10,07,20,09
},
{'rel_name': 'HAS_NO_REL'},
]
}
TEST_COLLECTION.update_one(
{'_id': ObjectId(document_id)},
[
{'$set': {
'relationships': {
'$let': {
'vars': {
'date': { '$dateFromString': { 'dateString': '$published_date', format: "%Y/%m/%d %H:%M:%S" } }
},
'in': {
'$map': {
'input': "$relationships",
'in': {
'$cond': {
'if': { '$eq': ["$$this.rel_name", "HAS_REL"] },
'then': { '$mergeObjects': ["$$this", { 'date': "$$date" }] },
'else': "$$this"
}
}
}
}
}
}
}
}
]
)
然而,我似乎没有得到正确的文件:
InvalidDocument:文档必须只有字符串键,键为
内置函数格式
看看
您必须指定格式
字段,除非使用默认格式%Y-%m-%dT%H:%m:%S.%LZ“
。将日期/时间值存储为字符串通常是一个设计缺陷
所以,一定是这样
{'$dateFromString': { dateString: '$published_date', format: "%Y/%m/%d %H:%M:%S" } }
注意,时间被视为UTC时间。如果需要,设置字段时区
,以指定时区
请注意,$dateFromString()
是一个聚合函数,因此必须使用
TEST_COLLECTION.update_one(
{ '_id': ObjectId(document_id) },
[
{
$set: {
relationships: {
$map: {
input: "$relationships",
in: {
$cond: {
if: { $eq: ["$$this.rel_name", "HAS_REL"] },
then: {
$mergeObjects: [
"$$this",
{
date: {
$dateFromString: {
dateString: '$published_date',
format: "%Y/%m/%d %H:%M:%S"
}
}
}
]
},
else: "$$this"
}
}
}
}
}
}
]
)
或另一种风格:
TEST_COLLECTION.update_one(
{ '_id': ObjectId(document_id) },
[
{
$set: {
relationships: {
$let: {
vars: {
date: { $dateFromString: { dateString: '$published_date', format: "%Y/%m/%d %H:%M:%S" } }
},
in: {
$map: {
input: "$relationships",
in: {
$cond: {
if: { $eq: ["$$this.rel_name", "HAS_REL"] },
then: { $mergeObjects: ["$$this", { date: "$$date" }] },
else: "$$this"
}
}
}
}
}
}
}
}
]
)
看看
您必须指定格式
字段,除非使用默认格式%Y-%m-%dT%H:%m:%S.%LZ“
。将日期/时间值存储为字符串通常是一个设计缺陷
所以,一定是这样
{'$dateFromString': { dateString: '$published_date', format: "%Y/%m/%d %H:%M:%S" } }
注意,时间被视为UTC时间。如果需要,设置字段时区
,以指定时区
请注意,$dateFromString()
是一个聚合函数,因此必须使用
TEST_COLLECTION.update_one(
{ '_id': ObjectId(document_id) },
[
{
$set: {
relationships: {
$map: {
input: "$relationships",
in: {
$cond: {
if: { $eq: ["$$this.rel_name", "HAS_REL"] },
then: {
$mergeObjects: [
"$$this",
{
date: {
$dateFromString: {
dateString: '$published_date',
format: "%Y/%m/%d %H:%M:%S"
}
}
}
]
},
else: "$$this"
}
}
}
}
}
}
]
)
或另一种风格:
TEST_COLLECTION.update_one(
{ '_id': ObjectId(document_id) },
[
{
$set: {
relationships: {
$let: {
vars: {
date: { $dateFromString: { dateString: '$published_date', format: "%Y/%m/%d %H:%M:%S" } }
},
in: {
$map: {
input: "$relationships",
in: {
$cond: {
if: { $eq: ["$$this.rel_name", "HAS_REL"] },
then: { $mergeObjects: ["$$this", { date: "$$date" }] },
else: "$$this"
}
}
}
}
}
}
}
}
]
)
谢谢@Wernfried的回答。然而,对于pymongo,这似乎不起作用,我已经更新了问题谢谢@Wernfried的回答。然而,对于pymongo,这似乎不起作用,我已经更新了问题try
“格式”:
这样一个愚蠢的错误^^太多的时间编码,谢谢@wernfrieddomschiettry“格式”:
这样一个愚蠢的错误^太多的时间编码,谢谢@wernfrieddomschiet