我是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毫秒,但我没有看到这些记录有任何异常。
有什么想法吗?
似乎“name”字段没有索引:
> db.my_collection.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "domains.my_collection"
}
]
答案 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}
);