无法使用$ pullAll

时间:2016-03-04 07:14:21

标签: arrays mongodb pull

我有一个包含如下所示文件的集合

{ 
    "_id" : ObjectId("56d92901f9d573cc1c1fb8bb"), 
    "busEntryExitInformation" : {
        "dateTime" : ISODate("2016-03-04T06:19:45.914+0000"), 
        "busEntryExitEvent" : [
            {
                "plateNumber" : "ADFN3R2", 
                "direction" : "EXIT", 
                "routeNumber" : NumberInt(929), 
                "driverID" : "DId5", 
                "driverName" : "john", 
                "_id" : ObjectId("56d92901f9d573cc1c1fb8c0")
            }, 
            {
                "plateNumber" : "ADFN3R4", 
                "direction" : "EXIT", 
                "routeNumber" : NumberInt(652), 
                "driverID" : "DId2", 
                "driverName" : "jack", 
                "_id" : ObjectId("56d92901f9d573cc1c1fb8bf")
            }, 
            {
                "plateNumber" : "ADFN3R8", 
                "direction" : "EXIT", 
                "routeNumber" : NumberInt(500), 
                "driverID" : "DId5", 
                "driverName" : "john", 
                "_id" : ObjectId("56d92901f9d573cc1c1fb8be")
            }, 
            {
                "plateNumber" : "ADFN3R7", 
                "direction" : "ENTRY", 
                "routeNumber" : NumberInt(500), 
                "driverID" : "DId3", 
                "driverName" : "mack", 
                "_id" : ObjectId("56d92901f9d573cc1c1fb8bd")
            }, 
            {
                "plateNumber" : "ADFN3R2", 
                "direction" : "EXIT", 
                "routeNumber" : NumberInt(652), 
                "driverID" : "DId2", 
                "driverName" : "sandesh", 
                "_id" : ObjectId("56d92901f9d573cc1c1fb8bc")
            }
        ], 
        "cameraIntrinsics" : {
            "cameraFocalLength" : NumberInt(35), 
            "cameraAngle" : NumberInt(20), 
            "imageWidth" : "1920", 
            "imageHeight" : "1080", 
            "frameRate" : NumberInt(25)
        }, 
        "cameraExtrinsics" : {
            "cameraId" : NumberInt(1), 
            "cameraName" : "Under Route-090 NorthboundBridge", 
            "cameraDirection" : "Towards Northbound Lanes", 
            "cameraLatitude" : 1.350228, 
            "cameraLongitude" : 103.984889, 
            "cameraHeight" : NumberInt(30)
        }
    }, 
    "__v" : NumberInt(0)
}
}

其中busEntryExitEvent是一个数组我试图删除数组元素,其中方向是退出集合中的所有文档 结果应包含所有带方向条目的文件

  { 
        "_id" : ObjectId("56d92901f9d573cc1c1fb8bb"), 
        "busEntryExitInformation" : {
            "dateTime" : ISODate("2016-03-04T06:19:45.914+0000"), 
            "busEntryExitEvent" : [

                {
                    "plateNumber" : "ADFN3R7", 
                    "direction" : "ENTRY", 
                    "routeNumber" : NumberInt(500), 
                    "driverID" : "DId3", 
                    "driverName" : "mack", 
                    "_id" : ObjectId("56d92901f9d573cc1c1fb8bd")
                }
            ], 
            "cameraIntrinsics" : {
                "cameraFocalLength" : NumberInt(35), 
                "cameraAngle" : NumberInt(20), 
                "imageWidth" : "1920", 
                "imageHeight" : "1080", 
                "frameRate" : NumberInt(25)
            }, 
            "cameraExtrinsics" : {
                "cameraId" : NumberInt(1), 
                "cameraName" : "Under Route-090 NorthboundBridge", 
                "cameraDirection" : "Towards Northbound Lanes", 
                "cameraLatitude" : 1.350228, 
                "cameraLongitude" : 103.984889, 
                "cameraHeight" : NumberInt(30)
            }
        }, 
        "__v" : NumberInt(0)
    }
    }  

我想这样做

db.busEntryExitDoc.update(
      {  $pull: { busEntryExitEvent: {  "direction" : "EXIT"} } },
      { multi: false }
      )

这要做的所有文件都没有,这里有条件怎么办请帮忙

2 个答案:

答案 0 :(得分:2)

MongoDB update()方法需要三个参数:db.collection.update(query, update, options)。如果要对所有文档执行update,只需将空对象用作query

db.busEntryExitDoc.update({},
    { $pull: { 'busEntryExitInformation.busEntryExitEvent' : {'direction' : "EXIT"} } },
    { multi: true }
);

另外,请注意使用dot notation访问数组字段:您必须将$pull运算符指向数组,否则操作将失败。最后,使用{ multi: true }作为options,因为您要更新集合中的所有文档。

答案 1 :(得分:1)

你做错了.update()的第一个参数是"查询"这里的参数应该是一个空文档。

db.busEntryExitDoc.update( 
    {},
    {  $pull: { "busEntryExitInformation.busEntryExitEvent": { "direction": "EXIT" }  } },
    {  multi: true }
)

同样适用于.updateMany()方法

db.busEntryExitDoc.update( 
    {},
    {  $pull: { "busEntryExitInformation.busEntryExitEvent":  { "direction": "EXIT" }  } },
)