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 "
}
]
