2016-07-12 26 views
0

Ich versuche, die Waterline .native() Methode zu verwenden, um ein Element nach ID in der Datenbank abzufragen. Dies ist, was mein Code wie folgt aussieht:Sails.js Waterline native MongoDB Abfrage nach ID?

// Consutruct the query based on type 
    var query = {}; 

    if (req.param('type') === 'id') { 
     query = { _id: req.param('number') }; 
    } else { 
     query = { 'data.confirmationNumber': req.param('number') }; 
    } 

    Confirmations.native(function(error, collection) { 
     if (error) { 
      ResponseService.send(res, 'error', 500, 'Database error.'); 
     } else { 
      collection.find(query).toArray(function(queryError, queryRecord) { 
       if (queryError) { 
        ResponseService.send(res, 'error', 500, 'Database error.'); 
       } else { 
        if (queryRecord.length > 0) { 
         ResponseService.send(res, 'success', 200, queryRecord[0]); 
        } else { 
         ResponseService.send(res, 'error', 404, 'Your confirmation details could not be found.'); 
        } 
       } 
      }); 
     } 
    }); 

Wenn die Abfrage ‚data.confirmationNumber‘ es funktioniert, aber wenn es ‚_id‘ es dows nicht funktionieren. Wie behebe ich das?

Antwort

1

wenn Ihr Id ist ein ObjectId sehen this

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

{_id: new ObjectId(req.param('number'))} 
2

Iniside Modell und in Attribut definieren die ID-Feld wie diese

id : {type : 'objectid',primaryKey:true}

Wenn Sie den Code abfragen

Hier Mein Modellname ist - QuizModel und die ID kommt in den Params quizId, also ist hier quizId gleich der _id in der Mongodb-Datenbank ase

QuizModel.find({_id: QuizModel.mongo.objectId(quizId)}) 
     .then(function(response){ 

     }) 
     .catch(function(error){ 

     });