使用索引编制最快的MongoDB网络数据查询?

时间:2015-01-12 16:08:38

标签: mongodb mongodb-query

我有一个网络集myNetwork,如下所示:

{ _id:, source: "Node1", target: "Node534"},
...

假设它的大小为500K,但我的网络集合可以大到200万个文档。

在我的一个查询中,我有一个节点数组:myNodes = [“Node1”,“Node14”,“Node62”,“Node144”]我想查询myNetwork集合并获取节点之间的所有边缘数组。目前我在myNetwork上找到了一个:

db.myNetwork.find({}).toArray(function(err, myNet){

   // iterate through myNet objects and only keep those that source or target is in myNodes.

})

如何使用索引来优化此查询?

1 个答案:

答案 0 :(得分:1)

sourcetarget上添加单独的索引并使用$in查询而不是获取所有文档:

db.myNetwork.ensureIndex({source: 1})
db.myNetwork.ensureIndex({target: 1})

db.myNetwork.find({$or: [
    {source: {$in: myNodes}},
    {target: {$in: myNodes}}
]}).toArray(function(err, myNet) { ... });

每个$or子句都可以使用自己的索引,因此将使用这两个索引。