使用 gte 条件 MongoDB 查询删除数组内的对象

Query for remove object inside array using gte condition MonggoDB

你好,我是 monggodb 查询的新手,我正在尝试使用 mongo3t 查询删除数组中的对象,该查询是从 2021 年 9 月 13 日开始的日期。

我目前的数据是:考勤

{
    "_id": {
        "$oid": "6070b991d6231f8c205cb093"
    },
    "UserId": "5",
    "Ranges": [
        {
            "DateFrom": {
                "DateTime": {
                    "$date": "2021-09-12T00:00:00.000Z"
                },
                "Ticks": {
                    "$numberLong": "637536960000000000"
                }
            }
        },
        {
            "DateFrom": {
                "DateTime": {
                    "$date": "2021-09-13T00:00:00.000Z"
                },
                "Ticks": {
                    "$numberLong": "637536960000000000"
                }
            }
        },
        {
            "DateFrom": {
                "DateTime": {
                    "$date": "2021-09-15T00:00:00.000Z"
                },
                "Ticks": {
                    "$numberLong": "637536960000000000"
                }
            }
        }
    ]
}

这是我尝试执行的查询,

db.getCollection('attendance').update(
    { UserId: "5" },
    { $pull: { 'Ranges': { DateFrom: { DateTime: { $gte: new Date(2021, 09, 13) } } } } }
);

我的查询成功运行并显示消息“在 4 毫秒内更新了 1 条现有记录”,但在检查数据时没有任何反应。

这似乎没问题,只删除了最后一个元素。

查询

Test code here

db.collection.update({
  UserId: "5"
},
{
  $pull: {
    Ranges: {
      "DateFrom.DateTime": {
        $gte: ISODate("2021-09-14T00:00:00.000Z")
      }
    }
  }
})

您可以使用更新管道

db.con
    .collection("attendance")
    .updateOne({ UserId:"5" }, 
   [
    {$project:{
      UserId:1,
      Ranges:{
        $filter:{
          input:"$Ranges",
          as:"z",
          cond:
            {
              $gte:["$$z.DateFrom.DateTime", new Date(2021, 09, 13)]
            }
          
        }
      }
    }}
   ]
   )