我在MongoDB中有一个coll-1
和coll-2
。因此,我需要将数据从coll-1
复制到coll-2
,而又不干扰集合数据(两个集合都在同一个DB中),而且我不想做mongoexport
和{{1} }由于这些集合会在每次我们需要更新少量数据时收集大量数据,因此我应该很方便。
答案 0 :(得分:0)
在使用mongoDB V4.2时,两个集合都在同一个数据库中并且存在,因此您需要使用$merge:
尝试此查询:
db.getCollection('coll-1').aggregate( [
{ $merge : { into: { coll: "coll-2" }, on: "_id", whenNotMatched: "insert" } }
])
col-1中的文档:
/* 1 */
{
"_id" : ObjectId("5e1f7ac3f35652fb779fcf3e"),
"random1" : 1
}
/* 2 */
{
"_id" : ObjectId("5e1f7acff35652fb779fd310"),
"random1" : 2
}
col-2中的文档:
/* 1 */
{
"_id" : ObjectId("5e1f7adcf35652fb779fdb42"),
"random2" : 1
}
/* 2 */
{
"_id" : ObjectId("5e1f7ae5f35652fb779fde24"),
"random2" : 2
}
结果:
/* 1 */
{
"_id" : ObjectId("5e1f7adcf35652fb779fdb42"),
"random2" : 1
}
/* 2 */
{
"_id" : ObjectId("5e1f7ae5f35652fb779fde24"),
"random2" : 2
}
/* 3 */
{
"_id" : ObjectId("5e1f7ac3f35652fb779fcf3e"),
"random1" : 1
}
/* 4 */
{
"_id" : ObjectId("5e1f7acff35652fb779fd310"),
"random1" : 2
}
由于我想将所有内容从coll-1
写入coll-2
,因此在$merge
之前我没有任何聚合阶段,您需要将此$merge
作为聚合管道的最后阶段(出于测试目的,您可以实际上将其删除并通过几次空运行验证数据,然后执行实际操作)。此外,$merge
可以传递很多选项,例如-on
的字段值匹配且其他选项很少时该怎么办,所以请仔细阅读MongoDB文档。