如何简单地从collectionsABC复制文档并将其复制到collectionB中,如果条件如{conditionB:1}并添加时间戳如ts_imported - 而不知道原始文档中包含的详细信息?
我找不到mongodb的简单等价物,类似于mysql的INSERT ... SELECT ...
答案 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)
相关文档: