Mongoose, выберите определенное поле с помощью 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);
});
};
Но в моем json-ответе я получаю также _id, моя схема документа имеет только два типа: _id и name
[{"_id":70672,"name":"SOME VALUE 1"},{"_id":71327,"name":"SOME VALUE 2"}]
Почему???
Ответы
Ответ 1
Поле _id
всегда присутствует, если вы явно не исключили его. Сделайте это с помощью синтаксиса -
:
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);
});
};
Или явно через объект:
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);
});
};
Ответ 2
Теперь есть более короткий способ:
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
};
Если вы хотите большую часть Schema fields
и хотите опустить только несколько, вы можете префикс поля name
с помощью -
. Для ex "-name"
во втором аргументе не включает name
поле в документе, тогда как приведенный здесь пример будет иметь только поле name
в возвращаемых документах.
Ответ 3
Там лучший способ справиться с ним, используя Native MongoDB-код в 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/
Примечание:
var usersProjection
Список объектов, перечисленных здесь, не будет возвращен/распечатан.
Ответ 4
db.someschema.find( { }, { name: 1 } ).exec(function(err,Result){
var NameArray = Result;
console.log(NameArray);
})
Вывод:
[
{"name":"peter"},
{"name":"john"},
{"name":"joseph"}
]