gpt4 book ai didi

javascript - 字段投影中忽略的 batchSize 字段名称

转载 作者:可可西里 更新时间:2023-11-01 09:19:42 24 4
gpt4 key购买 nike

我有一个 user_batch 集合。它包含以下文件:

[{
_id: ObjectId("594baf96256597ec035df23c"),
name: "Batch 1",
batchSize: 30,
users:[]
},
{
_id: ObjectId("594baf96256597ec035df234"),
name: "Batch 2",
batchSize: 50,
users:[]
}]

在查找查询中,我只想投影 namebatchSize。但是当我从 nodejs 执行查找查询时,我在查询结果中得到了整个文档。查询:

db.collection('user_batch').find({}, {name: 1, batchSize: 1}).toArray((err, result) => {
if(err)
console.log(err)
else
console.log(result)
})

如果我只是传递 {name: 1} 那么它将转换 _id 和 name。但是如果我传递 batchSize 那么它将返回整个文档。

注意:在 Mongo Shell 中执行此查询时我没有遇到此问题

最佳答案

您是正确的,驱动程序错误地将其解释为 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()

关于javascript - 字段投影中忽略的 batchSize 字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45098742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com