MongoDB:变量和runCommand

时间:2015-10-01 19:37:07

标签: mongodb

我发现自己遇到了我的第一次"我只是无法弄清楚如何使用mongo"问题

我有以下"架构":

  • 元素的集合。什么在他们身上是不重要的
  • 连接的集合。每个条目定义如下:
    • fst_id:第一个元素的ID
    • snd_id:第二个元素的ID
    • 前锋:指示我们是否从第一个导航到第二个或反之亦然的bool

收藏品不小; 元素最终将包含1亿个文档; 连接最终将包含大约2亿个文档。

我想要进行的查询是#34;给定一组元素ID S,找到两端都在S"中的连接集。 S的典型尺寸是几十万。

现在,如果我在mongo shell中这样做,那将会相对简单(前提是我没有想过粘贴一百万个值的数组;我确定有一个合理的方法可以定义这个,但你会在某个时刻看到为什么这不是重点:

var s = ["id1","id2",..."id99999"]
db.connections.find(
  {
    $and: [
      {fst_id: {$in: s}},
      {snd_id: {$in: s}}
    ]
  }
)

这将是很好的,除了我通过传统的c ++驱动程序连接,所以我有权访问的是db连接类上的一个查询函数,它接受一个BSON对象。因此,我似乎仅限于生成以下代码(忽略构建命令的精细细节):

db.connections.find(
  {
    $and: [
      {fst_id: {$in: ["id1","id2",..."id99999"]}},
      {snd_id: {$in: ["id1","id2",..."id99999"]}}
    ]
  }
)

这个庞大,可怕的阵列变得复制了。我可以把它当作必要的邪恶,我必须定义一次。定义它两次似乎是亵渎神明的。

我尝试通过db.system.js定义一个函数,但是我不能通过runCommand运行它而不需要用户拥有管理员权限,并且无论如何,只要有人询问,MongoDB社区就会响应NO。关于它。

我想我可以将序列数组保存在一个集合中,但是我有另外一个问题,即如何在另一个集合中查询一个集合。

我的选择,正如我看到的那样:

  1. 与查询的大数组重复生活
  2. 修改架构,以便每个元素都包含与其相关的连接的ID(这会增加db大小并带来自身的复杂性)
  3. "不知何故"调用mongo而不必转出命令行
  4. 转到runCommand(eval ...具有管理员权限的路由
  5. 你们的其他任何人都可以建议
  6. 感谢您阅读此内容。

0 个答案:

没有答案