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

mongoDB :Създаване на ObjectId за всяко ново дете, добавено към полето на масива

Не е mongodb експерт, но ако съм ви разбрал правилно, искате полето _id на поддокумента да се вмъкне автоматично.

Създадох threads db и след това вмъкна първото message в messages колекция с помощта на следната команда:

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

Забележете _id:ObjectId() поле. Резултатът е следният:

Сега, когато имам ObjectId(56...) , мога да актуализирам този конкретен запис и да вмъкна още съобщения в него. И командата е както следва:

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

И горното ще вмъкне новото съобщение в колекцията. Вижте екранните снимки по-долу:

и накрая след няколко актуализации колекцията изглежда по следния начин:

Всички полета _id в messages масивът се генерира автоматично.

Може да не е добра идея да използвате _id полета по различни причини. Моля, Google за повече подробности дали да използвате _id като ключ за поддокументи или не.

Използвах MongoDB shell версия 3.0.6 за командите.

РЕДАКТИРАНЕ 28-01-2016 16:09

Тъй като горното решение беше базирано на обвивката на MongoDB, реших да направя друг тест, използвайки драйвер Node.js за MongoDB. На първо място, декларирам променлива ObjectID, както следва

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

Ще използвам ObjectID с идентификатора на документа на нишката, в която трябва да се вмъкне съобщението, както следва в моята update и findOneAndUpdate извиквания на функции

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

Тествано и двете и работят добре. Вижте екранната снимка по-долу:



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Нива на несигурност на MongoDB и как да ги избегнем

  2. 7 начина да проверите вашата версия на MongoDB

  3. Последователно итериране на курсора mongodb (изчакване на обратни извиквания, преди да преминете към следващия документ)

  4. MongoDB $reverseArray

  5. MongoDb заявка за сума