MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

mongoDB :Tworzenie identyfikatora obiektu dla każdego nowego dziecka dodanego do pola tablicy

Nie mongodb ekspert, ale jeśli dobrze rozumiem, chcesz, aby pole _id poddokumentu było wstawiane automatycznie.

Utworzyłem threads db, a następnie wstawił pierwszą message w messages zbieranie za pomocą następującego polecenia:

db.messages.insert({messages:[{_id:ObjectId(), message:"Message 1."}]}); 

Zwróć uwagę na _id:ObjectId() pole. Wynik jest następujący:

Teraz, gdy mam ObjectId(56...) , mogę zaktualizować ten konkretny rekord i wstawić do niego więcej wiadomości. A komenda wygląda następująco:

db.messages.update({"_id":ObjectId("56...")}, 
{$push:{messages:{_id:ObjectId(), message:"I am message 2."}}});

A powyższe wstawiłoby nową wiadomość do kolekcji. Zobacz poniższe zrzuty ekranu:

i wreszcie po kilku aktualizacjach kolekcja wygląda następująco:

Wszystkie pola _id w messages tablica jest generowana automatycznie.

Używanie _id może nie być dobrym pomysłem pola z różnych powodów. Prosimy o Google, aby uzyskać więcej informacji na temat tego, czy używać _id jako klucza dla poddokumentów, czy nie.

Użyłem MongoDB wersji 3.0.6 powłoki dla poleceń.

EDYTUJ 28-01-2016 16:09

Ponieważ powyższe rozwiązanie bazowało na powłoce MongoDB, postanowiłem przeprowadzić kolejny test przy użyciu sterownika Node.js dla MongoDB. Przede wszystkim deklaruję zmienną ObjectID w następujący sposób

var ObjectID = require('mongodb').ObjectID;

Użyję ObjectID z identyfikatorem dokumentu wątku, do którego należy wstawić wiadomość, jak następuje w mojej update i findOneAndUpdate wywołania funkcji

app.get('/insertNewMessage', function(req, res) {
    db.collection("messages").findOneAndUpdate({
        _id: new ObjectID('56aa3554e90911b64c36a424')
    }, {
        $push: {
            messages: {
                _id: new ObjectID(),
                message: "From NodeJS with <3 using findOneAndUpdate.Bye."
            }
        }
    }, function(err, result) {
        if (err)
            res.json(err);
        else
            res.json(result);
    });
});

Przetestowałem oba i działa dobrze. Zobacz zrzut ekranu poniżej:



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pomóż zdefiniować niesamowite narzędzie MongoDB GUI

  2. Zaktualizuj zagnieżdżone poddokumenty w MongoDB za pomocą arrayFilters

  3. Czy mogę określić, czy ciąg jest identyfikatorem obiektu MongoDB?

  4. Wskazówki dotyczące aktualizacji serwera Percona do MongoDB

  5. Jak uzyskać dostęp do instancji MongoDB 4.2?