有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java MongoDB:在添加属性时将文档从一个集合复制到另一个集合

我正在寻找一种有效的方法,在添加属性的同时将大量文档从一个集合复制到另一个集合。基本上,我有一个“spool space”集合,文档在其中堆积,在给定的时间,我必须添加一个特殊的元数据节点,并将它们推送到文档集合中

限制和环境:

  • 我们正在使用java驱动程序
  • 我们不知道文档结构
  • Mongo版本是3.2

现在,我们正在按如下方式进行文档操作:

    spool.find(
        eq("transfernode.id", currTransferId)
    )
    .forEach((Consumer<Document>) doc -> {
        doc.append("execnode", createMarkerNode("somedata")); // creates a sub-doc
        docs.insertOne(doc);
    });

然而,这是非常低效的

完美的做法是使用聚合管道并在$project阶段添加节点,但不幸的是,您必须为投影包含一个字段列表,正如我已经指出的,我们没有这样的列表,因为结构未知(即由用户决定)

(子问题:项目阶段是否可以在不知道所有内容的情况下以某种方式包括所有内容?)

下一个实验是使用MongoDB mapReduce。基本上,这工作起来很轻松,但是来自MapReduce的结果文档具有

{
   _id: "anId",
   value: {
       ... (this is the document I want)
   }
}

(注:我已经看到了问题的答案 [1] :mongoDB map/reduce minus the reduce但正在调用数据库。在finalize函数中插入是毫无疑问的。Mongo文档声明这是绝对避免的,我希望保持解决方案“干净”)

也许有一种方法可以“批量”将价值部分“复制”到新文档中

那么,有人知道如何做到这一点吗

编辑:在上面的原始问题文本中,我提到聚合管道似乎是一种可能的方式。与此同时,我发现聚合$out阶段取代了一个集合,而不是更新它。因此,这也不能使用:-(


共 (0) 个答案