【发布时间】:2017-01-30 16:45:38
【问题描述】:
假设我有一个这样定义的Person(集合persons):
const personSchema = Schema({
name: String,
children: [{
type: Schema.Types.ObjectId,
ref: 'Person',
}],
})
const Person = mongoose.model('Person', personSchema)
我不能将children 直接存储在Person 中,因为两个对象可以链接到同一个child,所以这就是我通过关系这样做的原因。
问题是,假设我想在一个查询中创建一个Person 及其children。我有一个 args 对象来获取数据,定义如下:
const args = { name: 'John', children: [{ name: 'Anna' }, {name: 'Craig'}] }
我需要一个查询来在 persons 集合中创建 3 个文档,名称为 John、Anna 和 Craig,它还应该在里面记录 Anna 和 Craig 的 ids John 的children 字段,像这样:
{_id: 1, name: "John", children: [2, 3]}
{_id: 2, name: "Anna"}
{_id: 3, name: "Craig"}
我试图将这个args 传递给这样的创建函数:
Person.create(args)
它抱怨children 数组不是ObjectIds 的数组。
我猜(还没有测试)如果我用personSchema 替换children 的type,它会创建一个嵌套文档,这是我不想要的。
所以,问题是:Mongoose 有没有一种方法可以在一个查询中执行我想要的操作? (我也知道我可以执行多个查询来保存每个孩子然后保存父母,但有些事情告诉我这不是应该做的,应该有更简单的方法来做到这一点)。
【问题讨论】:
标签: mongodb mongoose foreign-keys mongoose-schema nosql