我有一个mongodb集合,其中包含约100.000个文档。 每个文档都有约100个元素的数组。是这样的字符串数组:
features: [
"0_Toyota",
"29776_Grey",
"101037_Hybrid",
"240473_Iron Gray",
"46290_Aluminium,Magnesium",
"2787_14",
"9350_1920 x 1080",
"36303_Y",
"310870_N",
"57721_Y"
...
进行这样的查询非常快。但是有时会变得很慢,包括$ and中的特定额外条件。我不知道为什么会这样。当变慢时,它需要40秒钟以上。总是在相同的额外条件下发生。它很可能在其他情况下发生。
db.products.find({
$and:[
{
"features" : {
"$eq" : "36303_N"
}
},
{
"features" : {
"$eq" : "91135_IPS"
}
},
{
"features" : {
"$eq" : "9350_1366 x 768"
}
},
{
"features" : {
"$eq" : "178874_Y"
}
},
{
"features" : {
"$eq" : "43547_Y"
}
}
...
我在我的UNIX笔记本电脑和Linux服务器实例上运行相同的mongodb。 还尝试对具有相同结果的字段“特征”建立索引。
答案 0 :(得分:0)
在mongo查询中将$all
与数据一起使用可帮助您查询数组
首先在features
上创建索引
使用此查询可能对您有帮助
db.products.find( { features: { $all: ["36303_N", "91135_IPS","others..."] } } )
顺便说一句,
如果查询非常慢,请从mongod日志中获取慢速操作
显示您的mongodb版本。
查询时写任何内容(写将阻止某些版本的读取)
答案 1 :(得分:0)
我已经意识到$ all内部的顺序很重要。我通过集合中存在的文档数量(升序)更改元素的顺序。使查询更具选择性。
以前,查询需要大约40秒才能执行,现在,对元素进行排序需要大约22秒。
反正还有很多秒。