2014-06-22 13 views
48

Ich versuche, mitMongoose, Wählen Sie ein bestimmtes Feld mit find

exports.someValue = function(req, res, next) { 
    //query with mongoose 
    var query = dbSchemas.SomeValue.find({}).select('name'); 

    query.exec(function (err, someValue) { 
     if (err) return next(err); 
     res.send(someValue); 
    }); 
}; 

Aber in meiner json Antwort nur ein bestimmtes Feld wählen auch die _id Ich erhalte nur mein Dokument Schema zwei fiels hat, _id und name

[{"_id":70672,"name":"SOME VALUE 1"},{"_id":71327,"name":"SOME VALUE 2"}] 

Warum ???

Antwort

87

Das Feld _id ist immer vorhanden, es sei denn, Sie schließen es explizit aus. Tun Sie dies mit der - Syntax:

exports.someValue = function(req, res, next) { 
    //query with mongoose 
    var query = dbSchemas.SomeValue.find({}).select('name -_id'); 

    query.exec(function (err, someValue) { 
     if (err) return next(err); 
     res.send(someValue); 
    }); 
}; 

oder explizit über ein Objekt:

exports.someValue = function(req, res, next) { 
    //query with mongoose 
    var query = dbSchemas.SomeValue.find({}).select({ "name": 1, "_id": 0}); 

    query.exec(function (err, someValue) { 
     if (err) return next(err); 
     res.send(someValue); 
    }); 
}; 
+0

was diese - Sie sprechen, wo ich Informationen finden – Remario

34

Es gibt einen kürzeren Weg, dies jetzt zu tun:

exports.someValue = function(req, res, next) { 
    //query with mongoose 
    dbSchemas.SomeValue.find({}, 'name', function(err, someValue){ 
     if(err) return next(err); 
     res.send(someValue); 
    }); 
    //this eliminates the .select() and .exec() methods 
}; 

Im Fall, dass Sie die meisten Die Schema fields und möchten nur einige wenige weglassen, können Sie das Feld name mit einem - voranstellen. Für die Ex-"-name" im zweiten Argument wird nicht umfassen name Feld in der doc, während die hier gegebenen Beispiel nur das name Feld in den zurückgegebenen Dokumente haben.

+6

Für diejenigen, die mehrere Felder filtern möchten, dann trennen sie nicht mit Komma, einfach nur Raum: ' blogItemModel.find ({}, 'title intro_image intro_text publish_date', Funktion (err, blog_items) {.. ' – Starwave

+1

für diejenigen, die die where-Klausel in obigem verwenden wollen ** dbSchema.Somevalue.find ({userEmail: 'test @ test .com '},' userEmail -_id ', Funktion (err, someValue) ** – user2180794

8

Es gibt einen besseren Weg, um es mit Native MongoDB-Code in Mongoose zu behandeln.

exports.getUsers = function(req, res, next) { 

    var usersProjection = { 
     __v: false, 
     _id: false 
    }; 

    User.find({}, usersProjection, function (err, users) { 
     if (err) return next(err); 
     res.json(users); 
    });  
} 

http://docs.mongodb.org/manual/reference/method/db.collection.find/

Hinweis:

var usersProjection

Die Liste der Objekte hier aufgeführt werden nicht zurück/gedruckt.

3
db.someschema.find({ }, { "name": 1,"_id": 0 }).exec(function(err,Result){ 
    var NameArray = Result; 
    console.log(NameArray); 
}) 

Ausgang:

[ 
{"name":"peter"}, 
{"name":"john"}, 
{"name":"joseph"} 
] 
Verwandte Themen