select
メソッドの使用と混同しています。これは私がそれを使用する方法であり、間違っています:
Transaction.find({username : user.username}).select('uniqueId', 'confirmation_link', 'item_name', 'timeout', 'username', function(err, txs){
callback(txs);
});
私が達成しようとしているのは、データベース内のトランザクションからそのユーザー名を持つトランザクションを選択することであり、select
メソッドにリストされているフィールドのみを取り出します。 select
メソッドをどのように使用すればよいか、誰でも指摘できますか?ありがとう。
docs これは次のようにして達成できると言います:
Mongoose v4.0
_// Retrieving only certain fields
Model.find({}, 'first last', function (err, docs) {
});
_
古い時代遅れのAPI
_// Retrieving only certain fields
Model.find({}, ['first', 'last'], function (err, docs) {
// docs is an array of partially-`init`d documents
// defaults are still applied and will be "populated"
});
_
そのため、select()
なしでこれを行うことができます。
これを行う簡単な方法があります(.select
および配列を使用しない)、フィールドを2番目の引数としてスペースで区切って渡すだけ
User.find({}, 'first last', function (err, usr) {
//Got the result, saved a few bytes of code
});
これは別の方法です。 mongooseのクエリ
Transaction.find({username : user.username})
.select('uniqueId confirmation_link item_name timeout username')
.exec(function(err, txs) {
console.log(txs);
});
「_id」を取得せずに特定のフィールドを取得するには、除外するように指定できます
Model.find({}, {'Username':1, '_id':0}, function ( err, docs ){}.....
これはかなり役に立ちました: Mongoose/MongoDBのパスワードフィールドを保護して、コレクションにデータを入力したときにクエリで返されないようにする方法は?
いくつかのオプションがあるようです。
1)select('-_id')
を使用します。 2)_find({whatever: values}, '-_id', callback...}
_を使用します。このメソッドを検証することはできませんが、select()
で動作する場合、なぜここで動作しないのかわかりません。
特定のフィールドのみを取得するには、次を使用します。
Model.find({/*Your query*/}, {'firstName':1, 'lastname':1, '_id':0}, //Notice, this will omit _id! function ( err, docs ){}.....
これは機能し、_idなどの余分なIDは使用しません。
nodejsでは、この方法で選択と投影操作を簡単に行うことができます。これを試して
var Selection={
<some key of data model > : <target value for that key field>,
<some key of data model > : <target value for that key field>
//you can add many parameters here selection operation
};
var Projection = {
__v : false,
_id : false
//you can add many parameters here for projection
};
<DataModel>.find(Selection,Projection,function (err,data) {
if(err){
console.log(err);
}else{
console.log(data);
}
});
選択するフィールド間のコンマと引用符を削除します。
Transaction.find({username : user.username}).select('uniqueId confirmation_link item_name timeout username', function(err, txs){
callback(txs);
});