javascript mongodb - الحصول على _id المستند المدرج في قاعدة البيانات Mongo في NodeJS




insert document (6)

يمكنني استخدام NodeJS لإدراج المستندات في MongoDB. باستخدام collection.insert يمكنني إدراج مستند في قاعدة البيانات كما في هذا الكود:

// ...
collection.insert(objectToInsert, function(err){
   if (err) return;
   // Object inserted successfully.
   var objectId; // = ???
});
// ...

كيف يمكنني الحصول على _id الكائن المدرج؟

هل هناك أي طريقة للحصول على _id دون الحصول على أحدث كائن إدراج _id ؟

لنفترض أنه في نفس الوقت الكثير من الأشخاص الذين يقومون بالوصول إلى قاعدة البيانات ، لا يمكنني التأكد من أن أحدث معرف هو معرف الكائن المدرج.


Answers

يرسل Mongo المستند بالكامل كعنصر callback لذا يمكنك الحصول عليه ببساطة من هناك فقط.

فمثلا

collection.save(function(err,room){
  var newRoomId = room._id;
  });

هناك معلمة ثانية لاستدعاء group.insert الذي سيُرجع المستند أو المستندات التي تم إدخالها ، والتي يجب أن تحتوي على _ids.

محاولة:

collection.insert(objectToInsert, function(err,docsInserted){
    console.log(docsInserted);
});

وتحقق من وحدة التحكم لمعرفة ما أقصده.



يمكن استخدام طريقة أقصر من استخدام المعلمة الثانية objectToInsert._id الذي يقوم بإرجاع _id (داخل دالة رد الاتصال ، لنفترض أنها عملية ناجحة).

يقوم برنامج التشغيل Mongo لـ NodeJS بإلحاق الحقل _id الكائن الأصلي ، لذا من السهل الحصول على المُعرف المدرج باستخدام الكائن الأصلي:

collection.insert(objectToInsert, function(err){
   if (err) return;
   // Object inserted successfully.
   var objectId = objectToInsert._id; // this will return the id of object inserted
});

قمت بالفعل console.log () للمعلمة الثانية في وظيفة رد الاتصال للإدراج. يوجد بالفعل الكثير من المعلومات التي تم إرجاعها عن الكائن المدرج نفسه. لذا ، يوضح الكود أدناه كيفية الوصول إلى معرفه.

collection.insert(objToInsert, function (err, result){
    if(err)console.log(err);
    else {
        console.log(result["ops"][0]["_id"]);
        // The above statement will output the id of the 
        // inserted object
       }
});

ربما أستخدم http-proxy بطريقة خاطئة. باستخدام ريستلر يفعل ما أريد:

var express = require('express'),
    app = express.createServer(),
    restler = require('restler');


app.use(express.bodyParser());
app.listen( 1234);



app.get('/', function(req, res) {
    console.log(__dirname + '/index.html')
    res.sendfile(__dirname + '/index.html');
});
app.get('/js/*', function(req, res) {
    res.sendfile(__dirname + req.url);
});
app.get('/css/*', function(req, res) {
    res.sendfile(__dirname + req.url);
});


app.all('/*', function(req, res) {

    restler.get('http://myUrl.com:80/app_test.php/api' + req.url, {

        }).on('complete', function (data) {
                console.log(data)
               res.json(data)
            });

});






javascript node.js mongodb