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

时间:2017-10-25 21:53:29

标签: node.js mongodb mongoose nosql

我正在使用NodeJS和Mongoose。我有一个集合'user',其架构如下:

 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的用户,如果我有一个在不同时刻需要单个用户的一些(不是全部)信息的功能,那么查询它的最佳方法是什么?查询单个查询中的所有用户数据并在需要时在本地使用它们是否更好?或者更好地仅查询在同一函数中执行多个查询的所需字段?

我确切地说,在第二种情况下(更多查询),根据第一次查询的结果将改变后续查询所需的字段

2 个答案:

答案 0 :(得分:0)

我认为您应该根据函数需要查询有关用户的信息。 这样你就不需要在本地保存东西。

答案 1 :(得分:0)

从MongoDB的角度来看,性能没有区别: 在.select({fields you need})链接或不链接的情况下,您将获得相同数量的文档,因为它是重要查找中的查询(有关如何在mongodb中分析查询的详细信息,请参阅Explain command )。
 要提高Mongo的效果,您需要在您最常用的字段或最终create an index的集合中shard among instances {。}}。 您的案例中的重大影响是在节点内存方面:如果您在不久的将来不需要其他字段,建议使用select;当然,如果您需要在其他字段之后重新查询数据库,那么有意义的是不使用select,而是将整个用户对象保留在第一位。 注意:
从Mongoose 4.0+开始,您可以避免明确使用select命令like so