猫鼬, 选择特定字段与查找

2022-08-30 01:41:49

我正在尝试仅使用以下方式选择特定字段

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,我的文档架构只有两个fiel,_id和名称

[{"_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
};

如果您想要大部分内容,并且只想省略其中的一小部分,则可以在字段前面加上一个(减号)前缀。对于第二个参数中的 ex,将不包括文档中的字段,而此处给出的示例将包含返回文档中的字段。Schema fieldsname-"-name"namename