Dobry dzień Społeczność przelewowa :),

Nie mogę zrozumieć ani w rzeczywistości możliwe jest aktualizacja dokumentów za pomocą Foreach w MongoDB lub wszystkie podobne, aby rozwiązać mój problem. Spróbuję wyjaśnić problem i to, co starałem się jak najlepiej.

  1. Oto mockowa baza danych, którą stworzyłem za pomocą MongoDB i wygląda tak, że _id nie ma znaczenia dla pytania tylko uporządkowanego, który piszę poniżej:
    {
      "_id": "5fb812f7cd2b101374aa2bd8",
      "orderId": 322,
      "provider": "Barion Bistro"
    },{
      "_id": "5fb812f7cd2b101374aa2bd9",
      "orderId": 400,
      "provider": "Glacier Hotel"
    },{
      "_id": "5fb812f7cd2b101374aa2asd",
      "orderId": 1212,
      "provider": "HM Store"
    },{
      "_id": "5fb812f7cd2b101374aa2bbd",
      "orderId": 322,
      "provider": "Funky Town"
    },{
      "_id": "5fb812f7cd2b101374aa2bb2",
      "orderId": 3223,
      "provider": "Cocktails Bar"
    }
  1. Próbuję wykonać funkcję aktualizacji MongoDB, aby zaktualizować zamówienie. Mogę łatwo zmienić je do wszystkich (łącznie 5), ale chcę zrobić coś innego foreach dokumentów, stąd wszystkiego na raz. Korzystając z poniższego kwerencji poniżej, ten sam porządek zostanie ustawiony dla całej bazy danych, tj. Wszyscy dostawcy Bistro Bistro, Hotel Glacier itp. Wszystkie będą miały taki sam porządek, który będzie 2 po uruchomieniu zapytania poniżej.
    db.coupons.update({},   
      $set: {
        orderId: 2
      }
    }, {
      multi: true
    })
  1. Próbuję osiągnąć upoważnienie zamówienia dla każdego dostawcy, tj. Pierwszy dostawca Bistro Bistro będzie miał zamówić: 1, drugi dostawca będzie uporządkowany: 2, Trzecim dostawcy HM Store będzie zamówiony: 3 itd.

Utknąłem na tym problemie przez tydzień i nie mogę dowiedzieć się, czy jest rozwiązany za pomocą aktualizacji MongoDB. Próbowałem użyć następującego zapytania, który nie działa i chcę wiedzieć, czy ktoś rozwiązał podobny problem, jak mam. Zapytanie jest następujące:

    var counter = 1;
    
    db.coupons.update({
     $set: { doc.counterId: counter },
     { multi: true }
    }
    ).forEach(doc => { 
      counter = counter + 1
    })

Mam nadzieję, że każdy może doprowadzić mnie do właściwego kierunku. Pozdrawiam, Peter

Aktualizacja 11/21/2020

Dobra rld jest legendą, rozwiązał go!

0
Peter A 21 listopad 2020, 21:47

1 odpowiedź

Najlepsza odpowiedź

Jeśli używasz najnowszej Mongodb I.E., wersja & gt; = 4.2 , możesz użyć metody Foreach w następującym sposób:

var counter=1;
db.coupons.find().forEach( function (d) {
     db.coupons.updateOne({"_id":d._id},[{"$set":{"orderId": counter}}]);
     counter++;
})
0
RLD 21 listopad 2020, 20:16