尝试按照此处的示例来通过使用投影排除_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;
}
}
文档在这里和另一个示例。