web-dev-qa-db-ja.com

Mongooseのコレクションから特定のフィールドを除外するにはどうすればよいですか?

Mongoose ODM(Mongoose 3.3.1)を使用したNodeJSアプリケーションがあります。コレクションから1を除くすべてのフィールドを取得したい。たとえば、6つのフィールドを持つコレクションProductがある場合、フィールド "Image"を除くすべてを選択したい「exclude」メソッドを使用しましたが、エラーが発生しました。これが私のコードでした。

_    var Query = models.Product.find();
    Query.exclude('title Image');

    if (req.params.id) {
        Query.where('_id', req.params.id);
    }


    Query.exec(function (err, product) {
        if (!err) {
            return res.send({ 'statusCode': 200, 'statusText': 'OK', 'data': product });
        } else {
            return res.send(500);
        }
    });
_

しかし、これはerrorを返します

_Express
500 TypeError: Object #<Query> has no method 'exclude'.........
_

var Query = models.Product.find().exclude('title','Image');var Query = models.Product.find({}).exclude('title','Image');も試しましたが、同じエラーが発生しました。 Mongooseのコレクションから1つ(または2つ)の特定のフィールドを除外する方法。

49
dany

現在の(3.x)Mongooseビルドでフィールドを選択するには、 query.select を使用します。

除外するフィールド名の前に-を付けます。あなたの場合:

Query.select('-Image');

余談:JavaScriptでは、大文字で始まる変数はコンストラクター関数用に予約する必要があります。したがって、コード内でQueryqueryに名前変更することを検討してください。

102
JohnnyHK

その.exclude関数についてどこで読んだかわかりません。どのドキュメントにも見つからないからです。

ただし、findメソッドの2番目のパラメーターを使用して、フィールドを除外できます。

公式ドキュメント の例を次に示します。

db.inventory.find( { type: 'food' }, { type:0 } )

この操作は、typeフィールドの値がfoodであるすべてのドキュメントを返しますが、出力にtypeフィールドは含まれません。

27
Philipp
Model.findOne({ _id: Your Id}, { password: 0, name: 0 }, function(err, user){
  // put your code
});

このコードは私のプロジェクトで機能しました。ありがとう!!良い一日を。

17
Danieldms

あなたはこれを行うことができます

const products = await Product.find().select(['-image'])
0
Aditya