2016-03-04 8 views
0

У меня есть коллекция, которая содержит документы, как показано ниже

{ 
    "_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

Методы 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

, которые мне очень помогают – DhanaLaxshmi

1

Вы делаете это неправильно первый аргумент .update() является «запрос» аргумент, который должен быть пустой документ здесь.

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

То же самое применяется к методу .updateMany()

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