我正在node js项目上工作,我有一个mongodb的订单集合,我想在每个文档中添加一个字段,问题是我想传递一个函数作为这个新字段的值,函数的参数是文档的另外两个字段,这是一个例子,会让你理解。我的收藏:
[
{
_id:"eyxwapfhiezfe664ec",
orderPrice : 20,
createdAt : 2021-01-15T17:16:25.844Z
endedAt : 2021-01-15T17:20:25.844Z
}
{
_id:"eyxwlcfeojrfeoc",
orderPrice : 50,
createdAt : 2021-01-15T17:16:25.844Z
endedAt : 2021-01-15T17:20:25.844Z
}
{
_id:"eyxwapfhiseflflpsssc",
orderPrice : 20,
createdAt : 2021-01-15T17:16:25.844Z
endedAt : 2021-01-15T17:20:25.844Z
}
我想添加的字段是completedTime,这是createdAt和enddat之间的差异,我有一个函数differenceBetweenDates,它需要两个日期作为参数createdAt和结束于,但我不知道如何将这个函数传递到更新中的$set。所以为了更清楚,我想把这个字段添加到每个文档:
CompletedTime: differenceBetweenDates(createdAt, endedAt)
谢谢。
如果你使用的是MongoDB 4.2,你可以传递聚合表达式作为更新的一部分。
db.collection.updateMany({},[{ $set:{ CompletedTime: {$subtract:["$endedAt", "$createdAt" ]}}}])
在MongoDB 4.4中,你也可以使用一个带有$merge阶段的聚合管道来将结果集合并回原始集合:
db.collection.aggregate([
{ $set: { CompletedTime: {$subtract:["$endedAt", "$createdAt" ]}}},
{ $merge: "collection" }
])