我有一个user_batch集合。它包含以下文档:
[{
_id: ObjectId("594baf96256597ec035df23c"),
name: "Batch 1",
batchSize: 30,
users:[]
},
{
_id: ObjectId("594baf96256597ec035df234"),
name: "Batch 2",
batchSize: 50,
users:[]
}]
在查找查询中,我只想投影 name 和 batchSize
。但是,当我从nodejs执行find查询时,我会在查询结果中获取整个文档。查询:
db.collection('user_batch').find({}, {name: 1, batchSize: 1}).toArray((err, result) => {
if(err)
console.log(err)
else
console.log(result)
})
如果我只是通过 {name:1}, 那么它将投影_id和名称。但是,如果我通过 batchSize ,它将返回整个文档。
注意:在Mongo Shell中执行此查询时,我没有遇到此问题
您正确地认为驱动程序将其错误地解释为batchSize
选项,而忽略了projection语句。
尽管在现代驱动程序版本中,执行此操作的正确方法是实际使用.project()
“游标方法”。这与其他html" target="_blank">语言驱动程序的实现更加一致。
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()
问题内容: 有谁知道从INSERT查询中删除字段名称是否会带来一些性能改进? 我的意思是这样的: 比完成此任务更快地完成数据库: ? 我知道这可能是毫无意义的性能差异,但只是要知道。 我通常使用MySQL和PostgreSQL作为数据库。 问题答案: 不,实际上相反! 至少对于Microsoft SQL Server-您没有指定要使用的数据库..... 如果您未在SELECT或INSERT中指定字
我使用的是Spring r2dbc和ReactiveCrudRepository,我有一个在生成更新查询时需要忽略的字段 如何在更新查询中忽略companyName。我可以在使用@列的插入查询中忽略它,但它不适用于更新
问题内容: 我有一些必须序列化为JSON的数据。我正在使用JSON.NET。我的代码结构与此类似: 问题是,我的JSON输出需要具有ON OR 或ON- 取决于所使用的字段(即不为null)。默认情况下,我的JSON如下所示: 我知道我可以使用,但这给了我如下所示的JSON: 我需要的是: 有没有简单的方法可以做到这一点? 问题答案: 是的,您需要使用。 但是由于结构是值类型,因此您需要将Fiel
我使用的是ES Version1.1.2(Lucene4.7)。
我有一个搜索索引,包含一个名为的字段,它是一个数组。当我没有向查询中添加节时,标签值会出现在结果中,但当我添加了节时,它会被完全忽略,并且不会出现在结果中,如下所示。 这是否有原因或已知的问题?是ElasticSearch的某种保留词吗? 我使用的是ES版本1.1.2(Lucene 4.7)。
问题内容: 在成功提交用户详细信息时,我从客户端获得了JSON。 由于未更新JSON中的某些元素,因此可以跳过。 在Go服务器端,我定义了一个等效的结构。 服务器成功将JSON字节编组到结构中。 但是对于未从客户端接收到的字段,默认情况下取消对字符串的硬编码解组为nil,对字符串数组解压缩为空数组。 例如,如果我获取json , 则不希望由元帅将其转换为。 简单起见,我希望它是 如何完全忽略该字段