web-dev-qa-db-ja.com

_idフィールドなしでデータを取得するマングース

Node.jsアプリケーションのMongoose設定からいくつかのデータを取得したいと思います。フィールド選択として何を書いても、常に_idフィールドを取得することに気付きました。取得しない方法はありますか?これは私が今やっていることです:

Transaction.find({username : user.username}, ['uniqueId', 'timeout', 'confirmation_link', 'item_name'], function(err, txs){
        console.log("user : " + user.username + " with txs: " + txs);
        callback(txs);
});

_idフィールドを含む結果をログに記録します。

44
Masiar

_idは特に除外する必要があります。例えば、

Transaction.find({username : user.username}, { '_id': 0, 'uniqueId' :1, 'timeout': 1, 'confirmation_link': 1, 'item_name': 1}, function(err, txs){
  console.log("user : " + user.username + " with txs: " + txs);
  callback(txs);
});
56
danmactough

別の方法は、接頭辞-を持つテキスト引数を使用することです。これにより、結果からこのフィールドまたはそのフィールドが除外されます。

Entity.find({ ... }, '-_id field1 field2', function(err, entity) {
    console.log(entity);  // { field1: '...', field2: '...' }
});
85
VisioN

別のアプローチ:

  • __id_および___v_フィールドを削除するスキーマの.toJSON()を追加します
  • クライアントに送信されたすべてのDBオブジェクトで.toJSON()を呼び出します
  • 追加の利点#1:ObjectIdではなく_item.id === 'something'_であるため、_typeof id === 'string'_を使用できます。
  • 追加の利点#2:ganオブジェクトをクライアントから取得し、検索/更新する場合、__id_を手動で削除する必要はありません。無視されるのはidだけなので。

JSONの拡張:

_mySchema.set('toJSON', {
    virtuals: true,
    transform: (doc, ret, options) => {
        delete ret.__v;
        ret.id = ret._id.toString();
        delete ret._id;
    },
});
_

以下を使用できます。

_ let item = (await MyCollection.findOne({/* search */}).exec()).toJSON();
 if (item.id === 'someString') return item;
_

私はそれがknowいことを知っています。しかし、これは私がこれまでに持っている最高の悪い考えです。

12
Gábor Imre

5.2.13バージョンのMongoose(2018年9月)-クエリビルダーアプローチを使用すると、同じものに変換できます

async function getUserDetails(user) {
    try {
        if (!user || !user.name) return;
        const result = await Transaction.
        find({username : user.username}).
        select('uniqueId timeout confirmation_link item_name -_id'); 
        // Adding minus sign before the _id (like -_id) in the select string unselects the _id which is sent by default. 
        console.log(result);
    } catch(ex) {
        return ex
    }
}
3
Durja Arai