Мангуст, выберите конкретное поле с помощью функции Найти
Я пытаюсь выбрать только определенное поле с
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"}]
почему???
5 ответов:
The
_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); }); };
есть более короткий способ сделать это так:
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
С-
. Например"-name"
во втором аргументе будет не включитьname
поле в документе, тогда как приведенный здесь пример будет иметь только the
есть лучший способ справиться с этим, используя собственный код MongoDB в Мангуста.
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
список объектов, перечисленных здесь, не будет возвращен / напечатан.
DB данных
[ { "_id": "70001", "name": "peter" }, { "_id": "70002", "name": "john" }, { "_id": "70003", "name": "joseph" } ]
запрос
db.collection.find({}, { "_id": 0, "name": 1 }).exec((Result)=>{ console.log(Result); })
выход:
[ { "name": "peter" }, { "name": "john" }, { "name": "joseph" } ]
работая спортивная площадка образца
точный способ сделать это-это использовать
.project()
метод курсора с новымmongodb
иnodejs
драйвер.var query = await dbSchemas.SomeValue.find({}).project({ name: 1, _id: 0 })