小编wil*_*lis的帖子

当结果集很大时,即使使用索引,mongodb.countDocuments 也会很慢

mongodb.countDocuments当结果集很大时速度很慢

用户收集测试数据:

  • 1000 万个带有状态的文档'active'
  • 100k 个带有状态的文档'inactive'

该字段status已索引 {status: 1}

db.users.countDocuments({status: 'active'})需要 2.91 秒 db.users.countDocuments({status: 'inactive'})需要 0.018 秒

据我所知,countDocuments使用聚合来查找和计算结果。

estimatedDocumentCount() 在这种情况下不起作用,因为需要查询过滤器

有什么改进建议吗?

mongodb

7
推荐指数
1
解决办法
9378
查看次数

尝试将数据插入 Atlast 服务器上的集合时,命令失败并出现错误 8000 (AtlasError)

我正在使用 mongoDB Atlas 创建一个 mongodb。一切似乎都很好。当我运行程序时,服务器连接成功。但是,当我尝试将数据插入集合时,它给出了错误“命令失败,错误 8000 (AtlasError)”。我读到另一篇文章说我必须使用不同的数据库名称,但这仍然不起作用。我对此很陌生,因此我们将不胜感激。这是我的代码

public class DbController2<DBObject> {
MongoClientURI uri;
MongoClient mongoClient;
MongoDatabase database;
MongoCollection<Document> collection;

public DbController2() {
    uri = new MongoClientURI(
            "mongodb://dbEfish:PASSWORD@cluster0-shard-00-00-klemt.mongodb.net:27017,cluster0-shard-00-01-klemt.mongodb.net:27017,cluster0-shard-00-02-klemt.mongodb.net:27017/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true");

    mongoClient = new MongoClient(uri);
    database = mongoClient.getDatabase("eFishDB");
    collection = database.getCollection("controlVar");
}

public Document toDBObject(String key, String[] dataPoints) {
    return  new Document("_id", key)
            .append("Water Level", dataPoints[0])
            .append("Water Temperature", dataPoints[1])
            .append("pH Level", dataPoints[2])
            .append("Nitrate Level", dataPoints[3])
            .append("Oxygen Level", dataPoints[4])
            .append("Ammonia Level", dataPoints[5])
            .append("Light Intensity", dataPoints[6])
            .append("Air Temperature", dataPoints[7]);
}

public void insert(String key, String[] dataPoints) …
Run Code Online (Sandbox Code Playgroud)

java eclipse mongodb

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

mongodb ×2

eclipse ×1

java ×1