gpt4 book ai didi

mongodb - 在 mongodb 中查询某些字段是否只会节省查询时间?

转载 作者:行者123 更新时间:2023-12-04 10:24:35 27 4
gpt4 key购买 nike

是否querying certain fields only在mongodb查询中节省查询时间?

假设我有一个如下所示的架构。

const CommentSchema = new mongoose.Schema({
commentText:{
type:String,
required: true
},
arrayOfReplies: [{
replyText:{
type:String,
required: true
},
likes: [{
objectIdOfUser: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true,
},
}],
}],
});

我试图找出 mongodb 是否查询整个文档然后对其进行过滤,或者过滤是否发生在 mongodb 内部。

如果我有一个大 arrayOfReplies数组,例如 500,000 个回复。请问下面的查询, as shown the mongoose docs , 与查询整个文档相比,节省查询时间吗?
Comment.findById(id, 'commentText', function (err, comment) {});
编辑

我早些时候问过这个(见下文)。我已经改变了我的问题,以反射(reflect)我真正想问的问题。尽管下面查询的问题的答案仍然存在。
Comment.findById(id, 'replyText', function (err, comment) {});

最佳答案

在某些情况下,仅投影您需要的字段会影响性能。

如果投影允许查询完全covered ,由于根本不需要加载文档,因此可以有显着的改进。您可以使用 explain 运行您的查询看看是不是fetch需要舞台。

mongod 将从磁盘中获取整个文档到缓存中,然后将所需的数据从缓存中复制到响应中。

如果查询返回大量文档,减少每个文档返回的数据量将减少在网络上发送它所需的时间,并允许更多文档适合单个响应批次,从而减少网络开销。

在您的查询示例中,查找单个评论并获取 replyText 数组,您可能会看到通过不包含赞来减少通过网络发送的数据量的一些可以忽略不计的 yield 。 (这是假设您实际上没有索引replyText)

关于mongodb - 在 mongodb 中查询某些字段是否只会节省查询时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60679672/

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