特定のフィールドのみを選択しようとしています
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という2つのフィールドしかありません。
[{"_id":70672,"name":"SOME VALUE 1"},{"_id":71327,"name":"SOME VALUE 2"}]
なぜ???
_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
の前に-
を付けることができます。 exの場合、2番目の引数の"-name"
はnotドキュメントにname
フィールドを含めるのに対し、ここに示す例ではonly返されたドキュメントのname
フィールド。
Mongooseでネイティブ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 })