如何解决Mongodb bulkwrite updateOne基于数组最后一个元素中的日期
我试图根据数组中最后一个元素的日期使用Mongoose
和MongoDB
批量写入进行更新。
原始文档:
{
"_id": {
"$oid": "507f1f11bcf86cd799439011"
},"company": "ABC","historical": [{
"_id": {
"$oid": "5e0af1c63b6122125c1b42cb"
},"month": {
"$date": "2015-12-01T05:00:00.000Z"
},"data": [{
"date": {
"$date": "2015-12-14T05:00:00.000Z"
},"open": 11.6224,"high": 11.6224,"low": 10.5124,"close": 10.5124,"adjClose": 10.5124,"volume": 19100,"change": -1.11,"changePercent": -9.551,"vwap": 10.8824,"changeOverTime": -0.09551
}
]
}
],"dividend": [ {
"date": {
"$date": "2020-04-24T00:00:00.000Z"
},"payout": 0.11
},{
"date": {
"$date": "2020-07-24T00:00:00.000Z"
},"payout": 0.11
}
]
}
我有一个数据数组-arr(为简化起见,减少了元素):
[{
"data": {
"date": "2020-10-23","payout": 0.12
},"company": "ABC"
},{
"data": {
"date": "2020-10-23","payout": 0.12,},"company": "DEF"
}
]
如果“ dividend”日期中的最后一个索引早于数据数组中的日期,则我尝试运行bulkwrite并通过推入“ dividend”数组来更新匹配的文档。 尝试查询:
var ops = arr.map(function (info) {
return {
updateOne: {
filter: {
company: info.company,'dividend.1.date': { // how can I retrieve latest date without explicitly specifying the index?
$lt: new Date(info.data.date)
}
},update: { $push: { dividend: info.data } }
}
};
});
collection.bulkWrite(ops,function (err,r) {
// carry on with result
});
所需结果文档:
{
"_id": {
"$oid": "507f1f11bcf86cd799439011"
},"historical": [{
"_id": {
"$oid": "5e0af1c63b6122125c1b42cb"
},"month": {
"$date": "2015-12-01T05:00:00.000Z"
},"data": [{
"date": {
"$date": "2015-12-14T05:00:00.000Z"
},"changeOverTime": -0.09551
}
]
}
],"dividend": [ {
"date": {
"$date": "2020-04-24T00:00:00.000Z"
},"payout": 0.11
},{
"date": {
"$date": "2020-07-24T00:00:00.000Z"
},{
"date": {
"$date": "2020-10-23T00:00:00.000Z"
},"payout": 0.12
}
]
}
由于数据数组可能会变得很大,所以我宁愿在一次单次往返数据库中进行操作,而不要使用多个更新。 Mongoose
和MongoDB
可以做到这一点吗?希望有人可以帮我解决这个问题。在此先感谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。