我有两个 Mongoose 模型模式设置,以便子文档引用父文档,而不是父文档具有一组子文档。(由于对文档的 16MB 大小限制,我不想限制父/子文档之间的关系数量):
// Parent Model Schema
const parentSchema = new Schema({
name: Schema.Types.String
})
// Child Model Schema
const childSchema = new Schema({
name: Schema.Types.String,
_partition: {
type: Schema.Types.ObjectId,
ref: 'Parent'
}
})
我想创建一个静态方法,我可以查询父文档,然后查询与父文档匹配的任何子文档,然后在父文档中创建一个将引用子数组的新项目。
基本上,如果父文档是:
{
_id: ObjectId('56ba258a98f0767514d0ee0b'),
name: 'Foo'
}
子文件是:
[
{
_id: ObjectId('56b9b6a86ea3a0d012bdd062'),
name: 'Name A',
_partition: ObjectId('56ba258a98f0767514d0ee0b')
},{
_id: ObjectId('56ba7e9820accb40239baedf'),
name: 'Name B',
_partition: ObjectId('56ba258a98f0767514d0ee0b')
}
]
然后我希望有类似的东西:
{
_id: ObjectId('56ba258a98f0767514d0ee0b'),
name: 'Foo',
children: [
{
_id: ObjectId('56b9b6a86ea3a0d012bdd062'),
name: 'Name A',
_partition: ObjectId('56ba258a98f0767514d0ee0b')
},{
_id: ObjectId('56ba7e9820accb40239baedf'),
name: 'Name B',
_partition: ObjectId('56ba258a98f0767514d0ee0b')
}
]
}
另外,我希望它们保留 Mongoose 文档,以便在需要时更新父母和资产。
我能够通过toJSON
在 Parent 上使用来完成此操作,然后创建一个包含 Child 文档的新项目,但显然 Parent 文档不是真正的文档..
当我尝试这样做时,我一直遇到的错误是我无法在文档中创建一个不在架构中的新元素。
我知道我可以做一些事情,比如创建一个虚拟项目,它会返回查询孩子的承诺,但我希望有一个静态方法,返回一个响应(这意味着他们不必将虚拟项目作为承诺或回调处理)
让我知道这是否可能。谢谢!