从与数组元素中的字段匹配的文档中删除数组元素

我有一个看起来像这样的文件:

{
    "_id" : ObjectId("5f60ffc5aefd067a9ff9345c"),"_class" : "com.kalsym.smart.sms.data.MSASMS","number1" : NumberLong(923211105469),"numbers2" : [ 
        {
            "field1" : "20200915532E888","number2" : NumberLong(923018565627),"field2" : "abcd","datefield" : ISODate("2020-10-10T17:54:09.886Z")
        },{
            "field1" : "2020092570A6948","field2" : "efgh","datefield" : ISODate("2020-10-06T15:23:04.891Z")
        },"field2" : "ijkl","datefield" : ISODate("2020-10-03T15:23:04.891Z")
        }
    ],"optInCount" : 0
}

我要删除包含 datefield 值大于 2020-10-04

的数组索引

执行命令文档后,必须像这样进行更新:

{
    "_id" : ObjectId("5f60ffc5aefd067a9ff9345c"),"numbers2" : [ 
        {
            "field1" : "2020092570A6948","optInCount" : 0
} 
edward217 回答:从与数组元素中的字段匹配的文档中删除数组元素

您可以使用updateMany()update()$pull删除匹配的记录表单数组,

db.collection.updateMany({},{
  $pull: {
    numbers2: { datefield: { $gt: ISODate("2020-10-04T00:00:00.000Z") } }
  }
})

Playground

本文链接:https://www.f2er.com/1400040.html

大家都在问