【发布时间】:2022-01-01 20:54:15
【问题描述】:
我需要在集合之间移动数据,因为它们之前是使用关系模型设计的,并且我们遇到了一些查找性能问题。请注意,显示的数据只是一个示例,我需要为大量数据执行此操作。 数据结构如下:
// Collection person
{
_id: <object_id>
...other data
}
// Collection employments
{
_id: <object_id>
person_id: <person_id>,
... other data,
}
现在我需要根据person_id 和employment_id 将所有数据从employments 集合移动到person 集合。而且我不会删除employments 集合,因为由于某些用例,我还需要将一些元数据从person 集合移动到employment 集合。
编辑:
一个person 可以有多个employments。所以我需要用实际的employments 数据替换person 中的所有ids。此外,就业有person_id 需要替换(可以创建一个新属性,比如person 而不是替换person_id)由person 的一些元数据(例如姓名、电子邮件..)。
$merge 似乎很有希望。将需要尝试一下。让我感到困惑。
想要的结果示例:
两个集合中的文档如下所示:
人物集合
{
"_id": "619cf3045ce7329d6a8c059c",
"name": "John Doe",
"email": "johndoe@mail.com",
"contact": 1234567890
}
就业征集
// Two documents related to person above
// Document one
{
"_id": "619cf89913380c621ea8d4ec",
"person_id": "619cf3045ce7329d6a8c059c",
"employment_type": "Owner",
"yearly_income": 10000000
}
// Document two
{
"_id": "619cf912374db5aec2ceb6de",
"person_id": "619cf3045ce7329d6a8c059c",
"employment_type": "Salary",
"yearly_income": 12340000
}
人员集合的预期结果将更新为
{
"_id": "619cf3045ce7329d6a8c059c",
"name": "John Doe",
"email": "johndoe@mail.com",
"contact": 1234567890,
"employments": [
{
"_id": "619cf89913380c621ea8d4ec",
"person_id": "619cf3045ce7329d6a8c059c",
"employment_type": "Owner",
"yearly_income": 10000000
},
{
"_id": "619cf912374db5aec2ceb6de",
"person_id": "619cf3045ce7329d6a8c059c",
"employment_type": "Salary",
"yearly_income": 12340000
}
]
}
就业收集的预期结果将更新为
注意:更新集合时不需要employment_type和yearly_income(可以删除)
// Document one
{
"_id": "619cf89913380c621ea8d4ec",
"person_id": "619cf3045ce7329d6a8c059c",
"person": {
"_id": "619cf3045ce7329d6a8c059c",
"name": "John Doe",
"email": "johndoe@mail.com",
"contact": 1234567890
}
}
// Document two
{
"_id": "619cf912374db5aec2ceb6de",
"person_id": "619cf3045ce7329d6a8c059c",
"person": {
"_id": "619cf3045ce7329d6a8c059c",
"name": "John Doe",
"email": "johndoe@mail.com",
"contact": 1234567890
}
}
任何接近此的解决方案都是非常可接受的。
【问题讨论】:
-
看看$merge 请提供更多细节。
employments是一个数组,但person_id是一个标量值,因此您需要进行一些转换,例如$group或$unwind -
我添加了一个编辑@wernfried-domscheit。请检查一下。
-
请提供更多的文件细节。我们不需要看到所有这些,只需2-3个作为参考。请提供所需的结果。
-
文档与编辑展示几乎相同。我还包括了预期的结果。谢谢!
标签: node.js mongodb mongodb-query aggregation-framework aggregation