проекция не работает с db.collection.find в монго

Я начал использовать mongodb всего день назад и столкнулся с проблемой. Я искал в сети и stackoverflow, как скрыть значение _id в окончательном ответе, и, следуя предоставленным ответам, я попытался запустить свой код, но часть _id все еще отображается.

P.S.: Я использую cloud9 в качестве ide.

var mongo = require('mongodb').MongoClient;
mongo.connect('mongodb://localhost:27017/learnyoumongo', function(err, database) {
        if(err) throw err;
        const db = database.db('learnyoumongo');
        var parrots = db.collection('parrots');
        parrots.find({
            age: { $gt: +process.argv[2] }
        },{
            name: 1,
            age: 1,
            _id: 0
        }).toArray(function(err, docs){
            if(err) throw err;
            console.log(docs);
            database.close();
        });
});

person snehal maheshwari    schedule 25.01.2018    source источник
comment
Не могли бы вы опубликовать структуру документа ??   -  person Alejandro Montilla    schedule 25.01.2018
comment
Вы не можете иметь одновременно и 1, и 0. Таким образом, вы либо выбираете то, что хотите, отмечая поля 1, либо выбираете то, что вам не нужно, отмечая поля 0. Например. У меня есть 4 поля в объекте Email, Name, Age, Gender. Я хочу получить только Email и Name. Я мог бы сделать либо { Email: 1, Name: 1}, либо { Age: 0, Gender: 0}   -  person oneturkmen    schedule 25.01.2018
comment
Ваш код в порядке, я проверил, и он работает. У тебя ошибка?? Он не возвращает данные, как ожидалось??   -  person Alejandro Montilla    schedule 25.01.2018
comment
Да, я понимаю эту часть 0 и 1, но мой код, похоже, не понимает i.   -  person snehal maheshwari    schedule 26.01.2018
comment
нет, у меня нет никакой ошибки, но вывод не тот, что мне нужно. Я хочу скрыть свойство id, которое пытается сделать с помощью флага 0, но все же id отображается в окончательном выводе   -  person snehal maheshwari    schedule 26.01.2018


Ответы (1)


вы можете отделить проекцию следующим образом:

    parrots.find({
        age: { $gt: +process.argv[2] }
    }).project({_id:0}).toArray(function(err, docs){
        if(err) throw err;
        console.log(docs);
        database.close();
    });

у меня была такая же проблема с невозможностью заставить проекцию работать, и описанный выше метод сработал для меня

person Jo Gro    schedule 04.02.2018
comment
Спасибо!! Это сработало. Хотелось бы знать, почему это не работает, как объяснено в документах. - person Blam; 09.03.2018
comment
Это серьезное изменение; спасибо, что указали на это. Увидев этот ответ, я покопался в репозитории github. Это упоминается там, с примерами v2 и v3. (Много критических изменений в версии 3). github.com/mongodb/node-mongodb- родной/блоб/мастер/ - person R.L. Brown; 18.04.2018
comment
Отличный ответ! Пятно на !!! - person zulkarnain shah; 08.08.2018
comment
Это действительно отстой! Я потратил час, пытаясь понять, что не так, мой запрос отлично работает в Robo 3T и не работает в узле! : / Спасибо за Ваш ответ! - person Deano; 04.04.2019
comment
Спасибо! Оно работает! Я часами ломал голову, пока не нашел этот пост. - person Oliver Zhang; 29.07.2020
comment
Превосходно!! Большое спасибо. Мне было интересно, почему мой запрос не работает. Спасибо еще раз! - person Tapashee Tabassum Urmi; 14.10.2020