简单的MongoDB查询慢

时间:2016-03-12 22:26:17

标签: python performance mongodb

我是MongoDB的新手。我试图从Python脚本向Mongo数据库写一些数据,数据结构很简单:

{"name":name, "first":"2016-03-01", "last":"2016-03-01"}

我有一个脚本来查询“name”是否存在,如果是,则更新“last”日期,否则,创建文档。

if db.collections.find_one({"name": the_name}):

数据的大小实际上非常小,<5M字节,并且<150k记录。

一开始很快(例如前20,000条记录),然后越来越慢。我检查了分析仪配置文件,一些查询&gt; 50毫秒,但我没有看到这些记录有任何异常。

有什么想法吗?

更新1:

似乎“name”字段没有索引:

> db.my_collection.getIndexes()
[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "domains.my_collection"
    }
] 

1 个答案:

答案 0 :(得分:3)

首先,您应该检查该集合是否在&#34; name&#34;领域。请参阅mongo CLI中以下命令的输出。

db.my_collection.getIndexes();

如果没有索引则创建它(注意,在生产环境中,您最好在后台创建索引)。

db.my_collection.createIndex({name:1},{unique:true});

如果您想要在文档不存在时插入文档,或者如果文档存在则更新一个字段,那么您可以在没有预先查询的情况下一步完成。使用UPDATE命令和upsert选项以及$ set / $ setOnInsert运算符(参见https://docs.mongodb.org/manual/reference/operator/update/setOnInsert/)。

db.my_collection.update(
    {name:"the_name"},
    {
      $set:{last:"current_date"}, 
      $setOnInsert:{first:"current_date"}
    },
   {upsert:true}
 );