Node.js MongoDB查找带有投影以排除_id仍然返回它

时间:2017-12-09 18:59:37

标签: node.js mongodb

尝试按照示例here进行过滤,使用投影排除_id。 _id仍会返回:

代码

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/db1";

MongoClient.connect(url, function (err, db) {
    if (err) throw err;
    var dbase = db.db("db1"); //here    

    dbase.collection("customers").find(
        {},
        {
            _id: 0

        }
        ).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });

});

结果仍然如下返回:

  

[{_id:5a2bb2d6ee48575cb54c4365,       名字:'约翰',       地址:'Highway 71'},{_ id:5a2bb2d6ee48575cb54c436d,       名字:'苏珊',       地址:'One way 98'},.... {_ id:5a2bb2d6ee48575cb54c4371,       名字:'查克',       地址:'Main Road 989'},{_ id:5a2bb2d6ee48575cb54c4372,       名称:'Viola',       地址:'Sideway 1633'}]

理论上_id不应该是返回的一部分。这有什么不对?

3 个答案:

答案 0 :(得分:20)

要限制您必须使用fields选项的字段(不了解新的更新):

dbase.collection("customers").find(
        {},
        {fields:{_id: 0}}
        ).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });

更新:

对于版本> 3您必须改为使用projection选项:

dbase.collection("customers").find(
        {},
        {projection:{_id: 0}}
        ).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });

答案 1 :(得分:10)

在MongoDB API的第3版中,不推荐使用projection选项。您现在应该使用dbase.collection('customers').find({}, { projection: { _id: 0 } }).toArray(function (err, result) { if (err) { throw err } console.log(result) db.close() }) 选项。

例如:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function register()
    {
        if ('PROD' == $this->app->environment()) {
            Config::set('queue.connections.database.table', 'prod_jobs');
        } else if ('UAT' == $this->app->environment()) {
            Config::set('queue.connections.database.table', 'uat_jobs');
        }
    }
}

可在此处找到支持选项的完整列表:http://mongodb.github.io/node-mongodb-native/3.0/api/Collection.html#find

答案 2 :(得分:1)

从3.4版开始,现在可以在find()之外添加.project()。

使用ES8异步,等待。

例如:

async function connectDB(url) {

  try {
    const db = await MongoClient.connect(url);     
    const dbase = db.db("db1"); //here  
    
    const results = await dbase.collection("customers").find().project({_id:0}).toArray();

       console.log(result);
       db.close();
  }
  catch(err) {
    throw err;
  }
 }

文档here和另一个示例here