sql >> Databáze >  >> NoSQL >> MongoDB

mongoDB:Vytvoření ObjectId pro každé nové dítě přidané do pole Array

Ne mongodb expert, ale pokud vám dobře rozumím, přejete si, aby pole _id vnořeného dokumentu bylo vloženo automaticky.

Vytvořil jsem threads db a poté vložil první message ve messages sběr pomocí následujícího příkazu:

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

Všimněte si _id:ObjectId() pole. Výsledek je následující:

Nyní, když mám ObjectId(56...) , mohu aktualizovat tento konkrétní záznam a vložit do něj další zprávy. A příkaz je následující:

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

A výše uvedené by vložilo novou zprávu do kolekce. Viz níže uvedené snímky obrazovky:

a nakonec po několika aktualizacích kolekce vypadá následovně:

Všechna pole _id ve messages pole se generují automaticky.

Možná není dobrý nápad použít _id pole z různých důvodů. Další podrobnosti o tom, zda použít _id jako klíč pro vnořené dokumenty, získáte od Googlu.

Použil jsem MongoDB shell verze 3.0.6 pro příkazy.

EDITACE 28. 1. 2016 16:09

Protože výše uvedené řešení bylo založeno na prostředí MongoDB, rozhodl jsem se provést další test pomocí ovladače Node.js pro MongoDB. Nejprve deklaruji proměnnou ObjectID následovně

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

Použiji ObjectID s ID dokumentu vlákna, do kterého má být zpráva vložena, jak je uvedeno v mé update a findOneAndUpdate volání funkcí

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);
    });
});

Oboje vyzkoušeno a funguje dobře. Viz snímek obrazovky níže:



  1. Nastavení jarní relace na serveru redis

  2. Může redis zpracovat více příkazů, které závisí na předchozích?

  3. Implementujte funkci automatického dokončování pomocí vyhledávání MongoDB

  4. Sdílejte relace mezi php a uzlem