尝试按照示例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不应该是返回的一部分。这有什么不对?
答案 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;
}
}