Sie haben Recht, dass der Treiber dies fälschlicherweise als batchSize
interpretiert Option und ignoriert die Projektionsanweisung.
Der richtige Weg, dies in modernen Treiberversionen zu tun, besteht jedoch darin, tatsächlich .project()
zu verwenden stattdessen "Cursor-Methode". Dies ist konsistenter mit anderen Sprachtreiberimplementierungen.
db.collection('collection').find()
.project({ name: 1, batchSize: 1})
.toArray();
Als vollständige Demonstration:
const mongodb = require('mongodb'),
MongoClient = mongodb.MongoClient;
(async function() {
let db;
try {
db = await MongoClient.connect('mongodb://localhost/test');
// New form uses .project() as a cursor method
let result = await db.collection('collection').find()
.project({ name: 1, batchSize: 1})
.toArray();
console.log(JSON.stringify(result,undefined,2));
// Legacy form confuses this as being a legacy "cursor option"
let other = await db.collection('collection')
.find({},{ name: 1, batchSize: 1 })
.toArray();
console.log(JSON.stringify(other,undefined,2));
} catch(e) {
console.error(e)
} finally {
db.close()
}
})()
Erzeugt die Ausgabe:
[
{
"_id": "594baf96256597ec035df23c",
"name": "Batch 1",
"batchSize": 30
},
{
"_id": "594baf96256597ec035df234",
"name": "Batch 2",
"batchSize": 50
}
]
[
{
"_id": "594baf96256597ec035df23c",
"name": "Batch 1",
"batchSize": 30,
"users": []
},
{
"_id": "594baf96256597ec035df234",
"name": "Batch 2",
"batchSize": 50,
"users": []
}
]
Wobei das erste Ausgabeformular das korrigierte ist, mit .project()