оператор $ pull в MongoDB - PullRequest
       8

оператор $ pull в MongoDB

0 голосов
/ 28 сентября 2018
{
    "_id" : ObjectId("5badfada90fd543fd8aa7f96"),
    "__v" : 0,
    "deleted" : false,
    "groups" : [ 
        {
            "group" : "grp",
            "_id" : ObjectId("5bae09a601123357e58b66a2"),
            "activities" : [ 
                ObjectId("5bae09a601123357e58b66a3"), 
                ObjectId("5bae10de01123357e58b66a6")
            ]
        }, 
        {
            "group" : "123",
            "_id" : ObjectId("5bae0f1001123357e58b66a4"),
            "activities" : [ 
                ObjectId("5bae0f1001123357e58b66a5")
            ]
        }
    ],
    "nextActivityId" : 22,
    "name" : "test",
    "year" : "1",
    "status" : "2",
    "vision" : ObjectId("5bab2f4872acf42a81c124d0")
}

Вышеприведенная схема является схемой «плана». Мне нужно написать запрос для удаления действия из массива «действия».Каково будет оптимальное решение для этого?И как я буду использовать $ pull для достижения этой цели Это было мое решение, но оно удалит полный массив групп

Plan.update({ _id: PLAN ID }, { $pull: { groups: { activities: ACTIVITY ID } } })

PLAN ID BEING: "_id": ObjectId ("5badfada90fd543fd8aa7f96"), идентификатор активности дляПРИМЕР БЫТИЯ: ObjectId ("5bae09a601123357e58b66a3")

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Вы можете попробовать это,

    db.Plan.update({ _id: ObjectId("5badfada90fd543fd8aa7f96"),"groups.activities":{$in:[ ObjectId("5bae09a601123357e58b66a3") ]}},
{ $pull: { "groups.$.activities": ObjectId("5bae09a601123357e58b66a3") }  });

Позиционный оператор не нашел нужного соответствия в предупреждении запроса при использовании $ только для обновления объекта.

0 голосов
/ 28 сентября 2018

Вам необходимо использовать оператор позиционного $ обновления.

db.Plan.update(
    { "_id" : PLAN ID }, 
    { "$pull": { "groups.$.activities": ACTIVITY ID } } 
)
...