mongodb翻译为sql INSERT ... SELECT

时间:2012-11-23 17:11:10

标签: mysql mongodb

如何简单地从collectionsABC复制文档并将其复制到collectionB中,如果条件如{conditionB:1}并添加时间戳如ts_imported - 而不知道原始文档中包含的详细信息?

我找不到mongodb的简单等价物,类似于mysql的INSERT ... SELECT ...

4 个答案:

答案 0 :(得分:15)

您可以使用mongoshell中的javascript来获得类似的结果:

db.collectionABC.find({ conditionB: 1 }).
forEach( function(i) { 
  i.ts_imported = new Date();
  db.collectionB.insert(i);
});

答案 1 :(得分:1)

Mongodb没有那种查询能力,你可以(在查询中)根据第一个集合中的变量插入另一个集合。

您需要先取出该文档,然后对其进行操作。

你可以在技术上使用MR,但我觉得它不适用于你的场景。

答案 2 :(得分:0)

答案 3 :(得分:0)

我意识到这是一个老问题,但是...现在有一种更好的方法。 MongoDB现在有一个叫做聚合管道的东西(v 3.6及更高版本,也许还有一些旧的管道-我没有检查过)。聚合管道使您可以执行更复杂的操作,例如执行连接,添加字段并将文档保存到其他集合中。对于OP而言,管道如下所示:

var pipeline = [
    {$match: {conditionB: 1}},
    {$addFields: {ts_imported: ISODate()}},
    {$out: 'collectionB'}
]
// now run the pipeline
db.collectionABC.aggregate(pipeline)

相关文档: