Vous avez raison de dire que le pilote interprète incorrectement cela comme le batchSize
option et ignore la déclaration de projection.
La bonne façon de procéder, bien que dans les versions de pilotes modernes, consiste à utiliser le .project()
"méthode du curseur" à la place. Ceci est plus cohérent avec d'autres implémentations de pilotes de langage.
db.collection('collection').find()
.project({ name: 1, batchSize: 1})
.toArray();
En guise de démonstration complète :
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()
}
})()
Produit la sortie :
[
{
"_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": []
}
]
Où le premier formulaire de sortie est celui corrigé, en utilisant .project()