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つ)の特定のフィールドを除外する方法。
現在の(3.x)Mongooseビルドでフィールドを選択するには、 query.select
を使用します。
除外するフィールド名の前に-
を付けます。あなたの場合:
Query.select('-Image');
余談:JavaScriptでは、大文字で始まる変数はコンストラクター関数用に予約する必要があります。したがって、コード内でQuery
をquery
に名前変更することを検討してください。
その.exclude関数についてどこで読んだかわかりません。どのドキュメントにも見つからないからです。
ただし、findメソッドの2番目のパラメーターを使用して、フィールドを除外できます。
公式ドキュメント の例を次に示します。
db.inventory.find( { type: 'food' }, { type:0 } )
この操作は、typeフィールドの値がfoodであるすべてのドキュメントを返しますが、出力にtypeフィールドは含まれません。
Model.findOne({ _id: Your Id}, { password: 0, name: 0 }, function(err, user){
// put your code
});
このコードは私のプロジェクトで機能しました。ありがとう!!良い一日を。
あなたはこれを行うことができます
const products = await Product.find().select(['-image'])