使用索引最快 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.

})

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

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 子句都可以使用自己的索引,因此两个索引都将被使用。