Подтвердить что ты не робот

Использование метода .select() Mongoose

Я довольно запутался в использовании метода select. Вот как я его использую, и это неправильно:

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

То, что я пытаюсь достичь, - это просто выбрать из транзакций в базе данных те, у которых есть это имя пользователя, и я хочу извлечь только поля, перечисленные в методе select. Может ли кто-нибудь указать, как использовать метод select? Спасибо.

4b9b3361

Ответ 1

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().

Ответ 2

Теперь есть более короткий способ сделать это (не используя .select и не используя массив), просто передавая поля, разделенные пробелами, как второй аргумент

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

Документы

Ответ 3

это еще один способ: запросы в мангусте

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

Ответ 4

Чтобы получить определенные поля без получения "_id", вы можете указать, чтобы исключить его

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

Ответ 5

Это было очень полезно: Как защитить поле пароля в Mongoose/MongoDB, чтобы он не возвращался в запрос при заполнении коллекций?

Похоже, у вас есть несколько вариантов.

1) Используйте select('-_id'). 2) Используйте find({whatever: values}, '-_id', callback...}. Я не могу проверить этот метод, но если он работает с select(), я не понимаю, почему он здесь не работает.

Ответ 6

Чтобы получить только определенные поля, используйте следующее,

Model.find({/*Your query*/}, {'firstName':1, 'lastname':1, '_id':0}, //Notice, this will omit _id! function ( err, docs ){}.....

который будет работать и не будет вводить лишний идентификатор, такой как _id.

Ответ 7

операция выбора и проецирования может быть выполнена таким образом легко в 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);
        }
    });

Ответ 8

Удалите запятые и кавычки между полями, которые вы хотите выбрать:

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