MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Преместете елемент от един масив в друг в рамките на същия документ MongoDB

Няма $move в MongoDB . Като се има предвид това, най-лесното решение е двуфазен подход:

  1. Направете запитване към документа
  2. Създайте актуализацията с $pull и $push /$addToSet

Важната част тук, за да се уверите, че всичко е идемпотентно, е да включите оригиналния документ на масива в заявката за актуализация.

Даден е документ със следната форма:

{
    _id: "foo",
    arrayField: [
        {
            a: 1,
            b: 1
        },
        {
            a: 2,
            b: 1
        }
    ]
}

Да приемем, че искате да преместите { a: 1, b: 1 } към различно поле, може би наречено someOtherArrayField , бихте искали да направите нещо подобно.

var doc = db.col.findOne({_id: "foo"});
var arrayDocToMove = doc.arrayField[0];
db.col.update({_id: "foo", arrayField: { $elemMatch: arrayDocToMove} }, { $pull: { arrayField: arrayDocToMove }, $addToSet: { someOtherArrayField: arrayDocToMove } })

Причината, поради която използваме $elemMatch е да се уверим, че полето, което ще премахнем от масива, не се е променило, откакто направихме за първи път заявка към документа. Когато е свързан с $pull също така не е строго необходимо, но обикновено съм прекалено предпазлив в тези ситуации. Ако няма паралелизъм във вашето приложение и имате само един екземпляр на приложението, това не е строго необходимо.

Сега, когато проверяваме получения документ, получаваме:

db.col.findOne()
{
        "_id" : "foo",
        "arrayField" : [
                {
                        "a" : 2,
                        "b" : 1
                }
        ],
        "someOtherArrayField" : [
                {
                        "a" : 1,
                        "b" : 1
                }
        ]
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Валидиране на Mongoose:задължително:невярно, валидиране:регулярен израз, проблеми с празни стойности

  2. Направете комбинация от две полета уникална в моята колекция

  3. грешка TS2688:Не може да се намери файл с дефиниция на тип за „bson“

  4. MongoDB Cloud Deployment - High TTFB

  5. Получаване на вложени данни от MongoDB в рамка с данни на Pandas