2017-03-16 113 views
2

我想我错过了什么 - 我有大约2GB的集合,试图找到一个特定值的文件(显示为一个数字或字符串)简单而缓慢的MongoDB查询

我有大约14K收集文件。

这是查询,基本相当:

db.e_69.find({ 
    "field_groups.fields_data" : 
    { 
    "$elemMatch": { 
     "field_id": "502", 
     "value": {"$in": ["223384",223384]} 
    } 
}}) 

我使用MongoDB的3.2,小AWS服务器有两个副本集。

我知道这不是很多信息 - 但因为我是新手,我不确定需要什么信息,并且会很乐意根据需要添加信息。对于我来说,14K文档中的这样一个查询需要3秒钟,这很奇怪。

我错过了什么吗? 谢谢!

+0

您是否尝试过使用[MongoDB解释功能](https://docs.mongodb.com/manual/reference/explain-results/)检查查询?如果查询运行速度慢,这应该是首先要做的事情。 –

回答

0

按数字排序的工作更快,但您有一个数组,因此它会减慢查询速度,导致它有两种类型。

我会建议添加一个简单的布尔列,并在添加新的文档时,如果doc有“223384”,223384,只需将此布尔列设置为真值。 然后您的查询将变得简单并且快速搜索。 我希望有所帮助。

+0

谢谢YCotov,但我不确定我是否理解你的答案 - 我正在尝试读取数据,根据creteria检索信息。我使用数字和字符串的原因是用户可以同时使用...... – Yanipan

+0

这就是为什么在文档上传过程中实现附加逻辑会更好,这会检查文档是否具有这2个值,如果已经设置了boolen值为true,否则为false。 – YCotov

+0

但它可以是任何其他数字:) 我只想按价值查找文档 - 它可以是该字段中的任何值... – Yanipan