【发布时间】:2021-06-21 17:25:45
【问题描述】:
我正在尝试更新数组中的所有文档。我查看了位置运算符 $[],但问题是我正在尝试使用传递给日期库 momentjs 的先前值更新字段。 我尝试失败的查询是
await collection.update(
{},
{
$set: {
'activities.$[].duration.startTime': moment(
'activities.$[].duration.startTime',
'DD/MM/YYYY HH:mm:ss',
).toISOString(),
},
},
{ multi: true },
);
这会将startTime 字段设置为空。所以我的问题是如何将activities.$[].duration.startTime 的现有值传递给矩函数。
示例文档(现有)
{
"_id": {
"$oid": "6030b9244991b3001c678492"
},
"activities": [{
"effort": null,
"duration": {
"startTime": "19/01/2021 20:11:35",
"endTime": "19/01/2021 20:15:15",
},
}],
"userId": "5fc8c7504b26e66f676ea50d",
"workoutPlanCode": "",
}
预期输出:
{
"_id": {
"$oid": "6030b9244991b3001c678492"
},
"activities": [{
"effort": null,
"duration": {
"startTime": "2021-01-19T20:58:49.010Z",
"endTime": "2021-01-19T20:58:49.010Z",
},
}],
"userId": "5fc8c7504b26e66f676ea50d",
"workoutPlanCode": "",
}
【问题讨论】:
-
你能确认你意识到你的nodejs应用服务器上安装了momentjs模块并且更新是在mongodb服务器上执行的吗?
-
@AlexBlex 是的,但是如果我想在 $set 中使用自定义函数,我该怎么做?
-
你不能。没有人可以。
-
为了清楚起见,您正在使用聚合运算符的相对较新的更新。那里没有 npm 包,甚至没有原生 javascript。您只能使用these operators。如果您尝试将日期字段转换为字符串,则 $dateToString 应该可以完成这项工作。
-
@Totoro 添加您的示例数据查询mongoplayground.net 并使用链接更新故事。另外,添加预期的输出。
标签: javascript mongodb mongodb-query momentjs