【问题标题】:What is the advised way to populate a persistent collection with the results of a query in mongo?在 mongo 中使用查询结果填充持久集合的建议方法是什么?
【发布时间】:2012-03-28 22:24:57
【问题描述】:

显而易见的方法是做find,然后迭代游标,一个一个地插入元素。这对我来说似乎效率低下。

另一种方法是在查询结果上定义一个map-reduce,它不会减少任何东西并使用out参数来指定目标集合。这似乎是一个 hack。

有没有更有效、更直接的方法来做到这一点?

【问题讨论】:

    标签: python mongodb


    【解决方案1】:

    目前您必须使用您描述的解决方法,您所指的功能已被请求但尚未实现:

    https://jira.mongodb.org/browse/SERVER-610

    https://jira.mongodb.org/browse/SERVER-2920

    通过用例对它们进行投票和/或评论,以引起他们的注意。

    【讨论】:

      【解决方案2】:

      如果担心效率,可以用eval()运行查询服务器端

      > e_query
      function e_query() {
          db.collection1.find({...}).forEach(
              function(obj){
                  db.collection2.insert(obj);
              }
          );
      }
      > db.eval(e_query)
      

      【讨论】:

      • 是的,我们是。我对数组不感兴趣。我说的是永久收藏。如果查询的结果是数据量很大,那么先把它变成一个数组似乎不是什么好事。
      • Mongodb 返回游标。如果要在永久集合中使用结果,则必须做两件事:1)获取数据,2)填充集合。数组有什么问题?它允许您一次获取数据,并获得现成的集合。 (我们这里是 javacsript 领域,所以真的没有其他集合类型。)
      • 我说的是永久收藏,用use collections 命令显示。
      • 我明白你的意思。为什么不使用 eval() 来运行查询服务器端?
      猜你喜欢
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      相关资源
      最近更新 更多