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

Актуализация на Aggregate в Mongodb

Наистина не мисля, че дори като захранваща заявка рамката за агрегиране е правилната операция за използване тук. Всичко, което правите, е "денормализиране" на масива като отделни документи. Наистина не би трябвало да има нужда. Вместо това просто извлечете документа:

var query = {}; // whatever criteria

Users.find(query,"Invitation",function(err,docs) {
    if (err) {
        console.log(err);

    var results = [];        

    async.each(docs,function(doc,callback) {
        async.each(docs.Invitation,function(invite,callback) {
            Users.findOneAndUpdate(
                { "_id": doc._id, "Invitation._id": invite._id },
                { "$set": { "Invitation.$.Accepted": !invite.Accepted } },
                function(err,doc) {
                   results.push( doc );
                   callback(err);
                }
            );
        },callback);
    },function(err) {
        if (err)
            console.log(err);

        console.log(results);
    });    

});

Така че няма проблем да итерирате списъка с документи в отговор за това, което правите, просто искате да итерирате и членовете на масива. Уловката е при издаване на всякакъв вид .update() че трябва да сте наясно, тогава асинхронното повикване е завършено.

Така че използвам async.each но вероятно искате async.eachLimit за контролиране на цикъла. Съвпадението на елемента идва от позиционния $ оператор, съответстващ на съответстващия елемент на масива в заявката.

Това е просто JavaScript код, така че просто „превключете“ стойността с !invite.accepted което ще го обърне. За допълнително забавление върнете масива „резултати“, като натиснете модифицирания документ от .findOneAndUpdate() .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Актуализиране на вложен масив Mongoose

  2. Spring Data MongoDB - игнорирайте празните обекти

  3. създаване на родителски обект, който влага деца в mongoose

  4. Най-добрият начин за представяне на многоезична база данни в mongodb

  5. Къде трябва да поставя хронологията на дейностите в mongodb, вградена в потребител или отделно?