node.js mongodb查找投影以排除_id的投影仍然返回



尝试按照此处的示例来通过使用投影排除_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, 名称:'John', 地址:'高速公路71'},{_id:5a2bb2d6ee48575cb54c436d, 名称:"苏珊", 地址:'一种方式98'},.... {_id:5a2bb2d6ee48575cb54c4371, 名称:" Chuck", 地址:'Main Road 989'},{_id:5A2BB2D6EE48575CB54C4372, 名称:"中提琴", 地址:'sideway 1633'}]

理论上_id不应成为返回的内容的一部分。这里怎么了?

限制您必须使用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();
});

在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()
})

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

从版本3.4开始,现在有一个选择()外部添加.project()的选项。

使用es8 async,等待。

ex:

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;
  }
 }

文档在这里和另一个示例。

最新更新