【问题标题】:mongodb: one getAllData query VS more getSingleField queriesmongodb:一个 getAllData 查询 VS 更多 getSingleField 查询
【发布时间】:2018-04-07 03:31:58
【问题描述】:

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

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

【问题讨论】:

    标签: node.js mongodb mongoose nosql


    【解决方案1】:

    我认为您应该对需要获取用户信息的函数进行查询。 这样你就不需要在本地保存东西了。

    【讨论】:

      【解决方案2】:

      从 MongoDB 的角度来看,性能方面没有区别: 无论是否使用.select({fields you need}) 的链接,您都会遇到相同数量的文档,因为重要的是 find 中的查询(有关如何在 mongodb 中分析查询的更多信息,请参阅Explain command)。
      要提高 Mongo 的性能,您需要在您查询的最常用字段的集合中 create an index 或最终 shard among instances
      在您的案例中,最大的影响是在节点内存方面:如果您在不久的将来不需要其他字段,建议使用select;当然,如果您需要立即重新查询数据库以获取其他字段,那么不使用 select 是有意义的,而是首先保留整个用户对象。 注意:
      从 Mongoose 4.0+ 开始,您可以避免显式使用 select 命令 like so

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-23
        • 2012-05-11
        • 1970-01-01
        • 2020-12-15
        • 2015-03-01
        • 1970-01-01
        相关资源
        最近更新 更多