Vyhledávání na webu

javascript - Mongoose, Vybrat konkrétní pole pomocí find


Snažím se vybrat pouze konkrétní pole s

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

Ale v odpovědi na JSON dostávám také _id, můj dokumentový schéma má jen dva file, _id a jméno

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

Proč???

Odpověď č. 1

Pole _id je vždy přítomno, pokud jej výslovně nevyloučíte. Udělejte to pomocí syntaxe -:

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

Nebo explicitně prostřednictvím objektu:

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

Odpověď č. 2

Nyní je na to kratší způsob:

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

V případě, že chcete většinu polí schématu a chcete vynechat jen několik, můžete před název pole name přidat - (mínus). Například "-name" v druhém argumentu nezahrne pole name do dokumentu, zatímco zde uvedený příklad bude mít jen pole name v navrácených dokumentech.

Odpověď č. 3

Existuje lepší způsob, jak to řešit pomocí nativního kódu MongoDB v 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/

Poznámka :

var projekceUzivatelu

Seznam objektů uvedených zde nebude vrácen/vytištěn.

Odpověď č. 4

Tip: 0 znamená ignorovat a 1 znamená zobrazit.

Příklad 1:

User.find({}, { createdAt: 0, updatedAt: 0, isActive: 0, _id : 1 }).then(...)

Příklad 2:

User.findById(id).select("_id, isActive").then(...)

Příklad 3:

User.findById(id).select({ _id: 1, isActive: 1, name: 1, createdAt: 0 }).then(...)

Odpověď č. 5

Data DB

[
  {
    "_id": "70001",
    "name": "peter"
  },
  {
    "_id": "70002",
    "name": "john"
  },
  {
    "_id": "70003",
    "name": "joseph"
  }
]

Dotaz

db.collection.find({},
{
  "_id": 0,
  "name": 1
}).exec((Result)=>{
    console.log(Result);
})

Výstup :

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

Pracovní ukázkové hřiště

odkaz

Odpověď č. 6

Vyloučit

Níže uvedený kód získá všechna pole kromě hesla v každém dokumentu:

const users = await UserModel.find({}, {
  password: 0 
});
console.log(users);

Výstup

[
  {
    "_id": "5dd3fb12b40da214026e0658",
    "email": "[email "
  }
]

Zahrnout

Níže uvedený kód načte pouze e-mailové pole v rámci každého dokumentu:

const users = await UserModel.find({}, {
  email: 1
});
console.log(users);

Výstup

[
  {
    "email": "[email "
  }
]

Související články