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

Thr*_*osT 11 mongodb node.js

尝试按照此处的示例过滤使用投影来排除_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();
    });

});
Run Code Online (Sandbox Code Playgroud)

结果仍然如下返回:

[{_id:5a2bb2d6ee48575cb54c4365,姓名:'John',地址:'Highway 71'},{_ id:5a2bb2d6ee48575cb54c436d,姓名:'Susan',地址:'One way 98'},.... {_ id:5a2bb2d6ee48575cb54c4371,name :'Chuck',地址:'Main Road 989'},{_ id:5a2bb2d6ee48575cb54c4372,名称:'Viola',地址:'Sideway 1633'}]

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

wra*_*ler 25

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

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

更新:

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

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


ras*_*ing 10

在MongoDB API的第3版中,该fields选项已被弃用.您现在应该使用该projection选项.

例如:

dbase.collection('customers').find({}, {
    projection: {
        _id: 0
    }
}).toArray(function (err, result) {
    if (err) {
        throw err
    }

    console.log(result)
    db.close()
})
Run Code Online (Sandbox Code Playgroud)

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


Ste*_*ero 5

从版本 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;
  }
 }
Run Code Online (Sandbox Code Playgroud)

文档在这里,另一个例子在这里