Как удалить элемент в поддомене документа mongoosejs - PullRequest
0 голосов
/ 01 февраля 2020

как удалить «extras» с «id_extra = 8523» из «book» «id_book = 8522» этого конкретного пользователя? Я сейчас использую mon goosejs, но у меня ничего не получилось, я перепробовал много вещей, но все, что я пробовал, работало только до первого уровня вложенности до c.

{
   "_id":{
      "$oid":"5e32fce08919b53ad66cf694"
   },
   "user_id":{
      "$numberInt":"258787"
   },
   "username":"daaaa",
   "firstname":"davide",
   "api_key":"7b031c21edf1237c554867622ad1154f",
   "books":[
      {
         "_id":{
            "$oid":"5e356323a0ef6319ebb60162"
         },
         "id_book":{
            "$numberInt":"8522"
         },
         "blob_annotation":null,
         "extra_id":{
            "$numberInt":"995176"
         },
         "extras":[
            {
               "_id":{
                  "$oid":"5e356324a0ef6319ebb60163"
               },
               "id_extra":{
                  "$numberInt":"8523"
               },
               "type":"gallery_audio",
               "label":"Inverno a Boscodirovo"
            },
            {
               "_id":{
                  "$oid":"5e356324a0ef6319ebb60164"
               },
               "id_extra":{
                  "$numberInt":"8524"
               },
               "type":"gallery_audio",
               "label":"Storia di Primavera"
            }
         ],
         "raccolte":[

         ]
      }
   ],
}

Ответы [ 2 ]

2 голосов
/ 01 февраля 2020

Попробуйте использовать elemMatch в сочетании с $ :

db.books.update(
    {
        books: {
            $elemMatch: {
                "id_book": 8522, 
                "extras.id_extra": 8523
            }
        },
        user_id: 258787       
    }, 
    {
        $pull: {
            "books.$.extras": {
                "id_extra": 8523
            }
        }
   }
)
0 голосов
/ 01 февраля 2020

Вы можете сделать этот трюк: Фильтровать "extras" with "id_extra = 8523" of the "book" "id_book = 8522" и снова сохранять документы в MongoDB

db.collection.aggregate([
  {
    $match: {
      "books.id_book": 8522
    }
  },
  {
    $addFields: {
      "books": {
        $reduce: {
          input: "$books",
          initialValue: [],
          in: {
            $concatArrays: [
              "$$value",
              [
                {
                  _id: "$$this._id",
                  id_book: "$$this.id_book",
                  blob_annotation: "$$this.blob_annotation",
                  extra_id: "$$this.extra_id",
                  raccolte: "$$this.raccolte",
                  extras: {
                    $filter: {
                      input: "$$this.extras",
                      cond: {
                        $ne: [
                          "$$this.id_extra",
                          8523
                        ]
                      }
                    }
                  }
                }
              ]
            ]
          }
        }
      }
    }
  }
])

MongoPlayground

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...