web-dev-qa-db-ja.com

.select()メソッドのマングース使用

selectメソッドの使用と混同しています。これは私がそれを使用する方法であり、間違っています:

Transaction.find({username : user.username}).select('uniqueId', 'confirmation_link', 'item_name', 'timeout', 'username', function(err, txs){
        callback(txs);
});

私が達成しようとしているのは、データベース内のトランザクションからそのユーザー名を持つトランザクションを選択することであり、selectメソッドにリストされているフィールドのみを取り出します。 selectメソッドをどのように使用すればよいか、誰でも指摘できますか?ありがとう。

37
Masiar

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()なしでこれを行うことができます。

66
pkyeck

これを行う簡単な方法があります(.selectおよび配列を使用しない)、フィールドを2番目の引数としてスペースで区切って渡すだけ

User.find({}, 'first last', function (err, usr) {
    //Got the result, saved a few bytes of code
});

ドキュメント

19
Felipe Pereira

これは別の方法です。 mongooseのクエリ

Transaction.find({username : user.username})
.select('uniqueId confirmation_link item_name timeout username')
.exec(function(err, txs) {
        console.log(txs);
});
16
lee

「_id」を取得せずに特定のフィールドを取得するには、除外するように指定できます

Model.find({}, {'Username':1, '_id':0}, function ( err, docs ){}.....
10
Alex Stubbs

これはかなり役に立ちました: Mongoose/MongoDBのパスワードフィールドを保護して、コレクションにデータを入力したときにクエリで返されないようにする方法は?

いくつかのオプションがあるようです。

1)select('-_id')を使用します。 2)_find({whatever: values}, '-_id', callback...}_を使用します。このメソッドを検証することはできませんが、select()で動作する場合、なぜここで動作しないのかわかりません。

9
tandrewnichols

特定のフィールドのみを取得するには、次を使用します。

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);
        }
    });
3

選択するフィールド間のコンマと引用符を削除します。

Transaction.find({username : user.username}).select('uniqueId confirmation_link item_name timeout username', function(err, txs){
    callback(txs);
});
1
Eric