ドライバーがこれをbatchSize
として誤って解釈するのは正しいです オプションであり、射影ステートメントを無視します。
最近のドライバーリリースでは、これを行う正しい方法は、実際に.project()
を使用することです。 代わりに「カーソルメソッド」。これは、他の言語ドライバーの実装とより一貫性があります。
db.collection('collection').find()
.project({ name: 1, batchSize: 1})
.toArray();
完全なデモンストレーションとして:
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()
}
})()
出力を生成します:
[
{
"_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": []
}
]
.project()
を使用して、最初の出力フォームが修正されたフォームである場合