【问题标题】:projection not working with db.collection.find in mongo [duplicate]投影不适用于 mongo 中的 db.collection.find [重复]
【发布时间】:2018-07-05 04:47:18
【问题描述】:

我刚开始使用 mongodb 一天前遇到了一个问题。 我在 net 和 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();
        });
});

【问题讨论】:

  • 能把文档的结构贴一下吗??
  • 你不可能同时拥有 1 和 0。因此,您可以通过将字段标记为 1 来选择您想要的内容,或者通过将字段标记为 0 来选择您不想要的内容。例如我在一个对象Email, Name, Age, Gender 中有 4 个字段。我只想得到EmailName。我可以做{ Email: 1, Name: 1}{ Age: 0, Gender: 0}
  • 你的代码很好,我已经测试过了,它可以工作。你有错误吗??它没有按预期返回数据??
  • 是的,我得到了 0 和 1 部分,但我的代码似乎不理解我。
  • 不,我没有任何错误,但输出不是我需要的。我想隐藏尝试使用 0 标志但 id 仍然显示在最终输出中的 id 属性

标签: node.js mongodb amazon cloud9


【解决方案1】:

你可以像这样分离投影:

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

我遇到了同样的问题,无法进行投影,上述方法对我有用

【讨论】:

  • 谢谢!!那行得通。很想知道为什么它不像文档中解释的那样工作。
  • 这是一个重大的改变;感谢您指出。看到这个答案后,我浏览了 github repo。那里提到了“v2 vs v3”的例子。 (v3 中有很多重大更改)。 github.com/mongodb/node-mongodb-native/blob/master/…
  • 很好的答案!现场!!!
  • 这真的很糟糕!我花了一个小时想知道出了什么问题,我的查询在 Robo 3T 中运行良好,但在节点中却无法运行! : / 谢谢你的回答!
  • 谢谢!有用!在找到这篇文章之前,我花了好几个小时摸不着头脑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-08
相关资源
最近更新 更多