mongodb:一个getAllData查询VS更多getSingleField查询



我正在使用NodeJS和Mongoose。我有一个集合"用户",其架构如下所示:

 id: String
 name: String
 surname: String,
 otherField1: Number,
 otherFieldN: String,
 arrayField: [String],
 messages:[
        {
            date: SchemaTypes.Long,
            id: String,
            type: String,
            content: String
        }
    ],
status:String
假设我的集合中有超过 10K 个用户,如果我有一个函数在不同时刻需要单个用户的一些(不是全部)信息,那么查询它的最佳方法是什么?是在单个查询中查询所有用户数据并在需要时在本地使用它们更好,还是只查询对同一函数执行多个查询的所需字段更好?

我精确地指出,在第二种情况下(更多查询),根据第一个查询的结果将更改后续查询所需的字段

我认为

您应该对函数需要进行查询以获取有关用户的信息。这样,您就不需要在本地保存内容。

从MongoDB的角度来看,性能方面没有区别:无论是否链接.select({fields you need}),您都会遇到相同数量的文档,因为查找中的查询很重要(有关如何在 mongodb 中分析查询的详细信息,请参阅解释命令)。
为了提高 Mongo 的性能,您需要在集合中查询的最常用字段上创建一个索引,或者最终在实例之间分片。
在您的案例中,最大的影响是在节点内存方面:如果您在不久的将来不需要其他字段,建议使用select;当然,如果您需要在之后立即重新查询数据库以获取其他字段,那么不使用 select 是有意义的,而是将整个用户对象放在首位。注意:
从 Mongoose 4.0+ 开始,您可以避免像这样显式使用 select 命令。

最新更新