如何解决MongoDB根据之前的元素删除元素迭代
如果相同的对象具有相似的元素,我想有条件地从我的MongoDB对象中删除($ unset)元素。 我的对象:
{
"_id": "5eabf8b144345b36b00bfbaa","ranktime": [{
"pos":"2","datum":"Mon May 05 2020 12:22:52 GMT+0200 (GMT+02:00)","source":"SOURCE2"
},{
"pos":"1","datum":"Fri May 01 2020 12:23:10 GMT+0200 (GMT+02:00)","source":"SOURCE1"
},{
"pos":"37","datum":"Fri May 01 2020 12:25:14 GMT+0200 (GMT+02:00)",{
"pos":"12","datum":"Fri May 01 2020 18:45:27 GMT+0200 (GMT+02:00)","source":"SOURCE2"
}]
}
因此,如果ranktime
并且日期与以前的对象相同,我想删除ranktime.source == "SOURCE2"
中的条目。实际上,我必须遍历ranktime
的单个元素。在MongoDB中有可能吗?
预期结果将是:
{
"_id": "5eabf8b144345b36b00bfbaa","source":"SOURCE2"
}]
}
解决方法
基本上,您可以使用$reduce处理数组并使用$let和$arrayElemAt语句定义上一个元素。新的$set语法允许您在更新语句中使用聚合:
db.col.updateMany({},[
{
$set: {
ranktime: {
$reduce: {
input: "$ranktime",initialValue: [],in: {
$let: {
vars: { last: { $arrayElemAt: [ "$$value",-1 ] } },in: {
$cond: [
{
$and: [
{ "$eq": [ "$$last.source","SOURCE2" ] },{ "$eq": [ { $substr: [ "$$last.datum",15 ] },{ $substr: [ "$$this.datum",15 ] } ] },]
},"$$value",{ $concatArrays: [ "$$value",[ "$$this" ] ] }
]
}
}
}
}
}
}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。