使用索引最快 MongoDB 查询网络数据?
Fastest MongoDB query for network data using indexing?
我有一个网络 collection myNetwork 看起来像:
{ _id:, source: "Node1", target: "Node534"},
...
假设它的大小为 500K,但我的网络 collection 可以与 2M 文档一样大。
在我的一个查询中,我有一个节点数组:myNodes = ["Node1", "Node14", "Node62", "Node144"] 我想查询myNetwork collection 并获取数组中节点之间的所有边。目前我在 myNetwork 上查找:
db.myNetwork.find({}).toArray(function(err, myNet){
// iterate through myNet objects and only keep those that source or target is in myNodes.
})
如何使用索引来优化此查询?
在 source
和 target
上添加单独的索引并使用 $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
子句都可以使用自己的索引,因此两个索引都将被使用。
我有一个网络 collection myNetwork 看起来像:
{ _id:, source: "Node1", target: "Node534"},
...
假设它的大小为 500K,但我的网络 collection 可以与 2M 文档一样大。
在我的一个查询中,我有一个节点数组:myNodes = ["Node1", "Node14", "Node62", "Node144"] 我想查询myNetwork collection 并获取数组中节点之间的所有边。目前我在 myNetwork 上查找:
db.myNetwork.find({}).toArray(function(err, myNet){
// iterate through myNet objects and only keep those that source or target is in myNodes.
})
如何使用索引来优化此查询?
在 source
和 target
上添加单独的索引并使用 $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
子句都可以使用自己的索引,因此两个索引都将被使用。