2014-06-22 14 views
48

Tôi đang cố gắng để chỉ chọn một lĩnh vực cụ thể vớiMongoose, Chọn một lĩnh vực cụ thể với tìm

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

Nhưng để đáp ứng json của tôi tôi nhận cũng là _id, lược đồ tài liệu của tôi chỉ có hai FIELS, _id và tên

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

Tại sao ???

Trả lời

87

Trường _id luôn có mặt trừ khi bạn loại trừ nó một cách rõ ràng. Làm như vậy bằng cách sử dụng - cú pháp:

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

Hoặc một cách rõ ràng thông qua một đối tượng:

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

Cái này - bạn nói về, nơi tôi có thể tìm thấy thông tin – Remario

34

Có một cách ngắn hơn để làm điều này bây giờ:

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

Trong trường hợp bạn muốn nhất của Schema fields và chỉ muốn bỏ qua một số ít, bạn có thể thêm tiền tố vào trường name với số -. Đối với cựu "-name" trong đối số thứ hai sẽ không bao gồm name trường trong doc trong khi ví dụ đưa ra ở đây sẽ có chỉ các name trường trong các tài liệu trả về.

+6

Đối với những người muốn lọc nhiều lĩnh vực, không tách chúng bằng dấu phẩy, không gian chỉ đơn giản: ' blogItemModel.find ({}, 'title intro_image intro_text publish_date', hàm (err, blog_items) {.. ' – Starwave

+1

cho những ai muốn sử dụng mệnh đề where ở trên ** dbSchema.Somevalue.find ({userEmail: 'test @ test .com '},' userEmail -_id ', hàm (err, someValue) ** – user2180794

8

Có cách tốt hơn để xử lý nó bằng mã MongoDB gốc ở Mongoose.

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/

Lưu ý:

var usersProjection

Danh sách các đối tượng được liệt kê ở đây sẽ không được trả lại/in.

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

Output:

[ 
{"name":"peter"}, 
{"name":"john"}, 
{"name":"joseph"} 
] 
Các vấn đề liên quan