web-dev-qa-db-ja.com

マングース、検索で特定のフィールドを選択

特定のフィールドのみを選択しようとしています

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

なぜ???

84
TlonXP

_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);
    });
};
139
Neil Lunn

現在、これを行うより短い方法があります。

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フィールド。

57
Akash

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

ここにリストされているオブジェクトのリストは返されません/印刷されません。

19
ElvinD

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

作業サンプルの遊び場

リンク

7

これを行う正確な方法は、 .project() 新しいmongodbおよびnodejsドライバー。

var query = await dbSchemas.SomeValue.find({}).project({ name: 1, _id: 0 })
3
Ashh