将单独集合中的引用文档移动到原始集合 mongodb 中



我有一个现有的集合,它引用了另一个集合,然后在查询数据库时填充该集合。我改变了主意,现在只想将这些文件嵌入到原始集合中。有没有办法以编程方式做到这一点?

这是我所拥有的:

events: [{
_id '38e88a8c8323...',
items: [
{ ObjectID: '5e0f39e0d90a09c...'}
]
}]
items: [{
_id: '5e0f39e0d90a09c...',
name: 'Example'
}]

这是我想要的:

events: [{
_id '38e88a8c8323...',
items: [
{
_id: '5e0f39e0d90a09c...',
name: 'Example'
}
]
}

您可以使用$unwind$lookup管道执行聚合。

db.events.aggregate([
{
$unwind: "$items"
},
{
$lookup: {
from: "items",
localField: "items.ObjectID",
foreignField: "_id",
as: "items"
}
},
{
$group: {
_id: "$_id",
items: {
$push: {
$arrayElemAt: [
"$items",
0
]
}
}
}
},
{
$merge:{
into : "tmp",
on : "_id", 
whenMatched : "replace",
whenNotMatched : "insert"
}
}
])

蒙戈游乐场

编辑:它将创建tmp集合。只需删除events并将tmp重命名为events.

FWIW 我最终使用了$lookup和$out,因为$merge在我使用的 Mongodb 版本中不可用($merge在 v4.2 中可用(。

db.events.aggregate([
{'$lookup': {
'from':'items', 
'localField':'items',
'foreignField':'_id',
'as':'items'
}},{'$out':'events'}])

这直接将其保存到事件中,因此我不必创建临时集合并重命名

最新更新