2

Я пытаюсь вытащить элемент в массиве с е два уровня сложности глубокой

Мой документ:

> db.users.find({ mail : '[email protected]'}).pretty() 
{ 
     "_class" : "bean.User", 
     "_id" : ObjectId("52f504bb2f9dd91186211537"), 
     "commandes" : [ 
       { 
         "adresse" : "15 rue de la soif", 
         "codePostal" : "29200", 
         "idCommande" : 1, 
         "montantTotal" : 0, 
         "nom" : "TOTO", 
         "prenom" : "tata", 
         "ville" : "Brest", 
         "voyagesSouscrits" : [ 
           { 
             "idVoyage" : "123", 
             "duree" : 1, 
             "nbPersonnes" : 0, 
             "villeDepart" : "Nantes", 
             "prixVoyage" : 999999 
           }, 
           { 
             "idVoyage" : "addVoyageSouscrit", 
             "duree" : 1, 
             "nbPersonnes" : 0, 
             "villeDepart" : "Toulouse", 
             "prixVoyage" : 7777 
           } 
         ] 
       }, 
       { 
         "idCommande" : 1, 
         "dateCommande" : ISODate("2014-02-07T16:07:23.930Z" 
), 
         "nom" : "TOTO", 
         "prenom" : "tata", 
         "adresse" : "15 rue de la soif", 
         "ville" : "Brest", 
         "codePostal" : "29200", 
         "montantTotal" : 0, 
         "voyagesSouscrits" : [ 
           { 
             "idVoyage" : "123", 
             "duree" : 1, 
             "nbPersonnes" : 0, 
             "villeDepart" : "Toulouse", 
             "prixVoyage" : 666666 
           } 
         ] 
       } 
     ], 
     "mail" : "[email protected]", 
     "password" : "tata" 
} 

В качестве первого шага я хочу, чтобы тянуть " voyagesSoucrits "с идентификатором" 123 ".

Согласно этому сообщению: MongoDB pull element from array two levels deep

Я пробовал:

> db.users.update({ mail : '[email protected]', "commandes.voyagesSouscrits.idVoyage" : "123"},{$pull : {"commandes.$.voyagesSouscrits" : {"commandes.voyagesSouscrits.idVoyage" : "123"}}}) 

Это не сработало!

Я сделал что-то не так, но я не могу его найти .... Любая идея?

ответ

1

Вам не нужна полная нотация, поскольку заполнитель уже перемещен в эту позицию в массиве.

db.junk.update(
    { "commandes.voyagesSouscrits.idVoyage": "123" }, 
    {$pull: { "commandes.$.voyagesSouscrits": { idVoyage: "123" } }} 
) 

Эта часть:

idVoyage: { <query> } 

только необходима, потому что позиционный оператор в "commandes $ voyagesSouscrits.." Может соответствовать только позициям первого массива, найденным в запросе.

http://docs.mongodb.org/manual/reference/operator/projection/positional/

Надежда, что очищает его.

+0

Отлично! Спасибо! – Lombric

+0

, и если я хочу добавить ограничение на мой $ pull на атрибут уровня выше? например: {$ pull: {"commandes. $. voyagesSouscrits": {dateCommande: null, "idVoyage": "123"}}} – Lombric

+0

Если это не внутри массива у команд. $. voyagesSouscrits level then that не работа. Для любых других ограничений вы хотите изменить часть запроса. –

Смежные вопросы