2015-12-01 2 views
1

это моя проблема, мне нужно удалить конкретную ссылку на ссылку _id в члены массива. Заряды от определенного члена .id во встроенный документ.

(я надеюсь, что будет ясно о моей проблеме).

Я стараюсь с этим.


db.branches.update(

    {'members._id':ObjectId("565dc20d338b60720c25e8d0"), 
    'members.charges': ObjectId("565dc20d338b60720c25e8d1") 
    }, 
    { 
     $pull:{'members.charges': ObjectId("565dc20d338b60720c25e8d1") } 
    } 
); 

(ветви, это название коллекции).


Но MongoDB говорит:

не может использовать часть (члены members.charges), чтобы пройти через этот элемент.


Моя структура коллекции:

{ 
    "_id" : ObjectId("565dc1cb338b60720c25e8ce"), 

    "phone" : "33 2132 1321", 
    "address" : "whereever", 
    "name" : "Gym2", 
    "account_id" : ObjectId("565dc1ad338b60720c25e8cc"), 
    "visits" : [], 
    "members" : [ 
     { 
      "name" : "Test User", 
      "package" : ObjectId("565dc1f9338b60720c25e8cf"), 
      "address" : "Sur 113 A No 429", 
      "phone" : "32 1321 3232", 
      "contactPhone" : "32 3213 1231", 
      "email" : "[email protected]", 
      "pendingCharges" : true, 
      "_id" : ObjectId("565dc20d338b60720c25e8d0"), 
      "created" : ISODate("2015-12-01T15:51:41.187Z"), 
      "charges" : [ 
       ObjectId("565dc20d338b60720c25e8d1") 
      ], 
      "active" : true 
     }, 
     { 
      "name" : "Test user 2", 
      "package" : ObjectId("565dc1f9338b60720c25e8cf"), 
      "address" : "whereever", 
      "phone" : "32 1321 3232", 
      "contactPhone" : "32 3213 1231", 
      "email" : "[email protected]", 
      "pendingCharges" : true, 
      "_id" : ObjectId("565dc22b338b60720c25e8d2"), 
      "created" : ISODate("2015-12-01T15:52:11.581Z"), 
      "charges" : [ 
       ObjectId("565dc22b338b60720c25e8d3") 
      ], 
      "active" : true 
     } 
    ], 
    "packages" : [ 
     ObjectId("565dc1f9338b60720c25e8cf") 
    ] 
} 

ответ

0

Вы должны указать обновление, которое members элемент массива, чтобы посмотреть в при вытягивании charges элемента. Вы можете сделать это с positional $ оператором, который представляет индекс согласованного members элемента массива из запроса:

db.branches.update(

    {'members._id':ObjectId("565dc20d338b60720c25e8d0"), 
    'members.charges': ObjectId("565dc20d338b60720c25e8d1") 
    }, 
    { 
     $pull:{'members.$.charges': ObjectId("565dc20d338b60720c25e8d1") } 
    } 
); 
+0

Спасибо, @JohnnyHK – Jodanduco