猫鼬多个深层种群
Posted
技术标签:
【中文标题】猫鼬多个深层种群【英文标题】:Mongoose multiple deep populates 【发布时间】:2018-02-10 13:49:54 【问题描述】:说,我有Manager
架构:
name: type: String ,
clients: [ type: Mongoose.Schema.ObjectId, ref: 'Client']
而且,我有 Client
架构:
name : type String ,
cars : [ type: Mongoose.Schema.ObjectId, ref: 'Car' ],
houses: [ type: Mongoose.Schema.ObjectId, ref: 'House' ]
还有Car
和House
(它们的结构对此并不重要。我如何在单个.populate()
调用中深度填充多个Client
的字段?
我尝试了什么:
Manager.find()
.populate(
path: 'users',
populate: path: 'cars' ,
populate: path: 'houses'
);
如果它起作用,我真的会感到惊讶(因为我覆盖了之前声明的 populate
传递给 .populate()
方法的键)。我的示例显然返回每个用户填充的 houses
字段 - 最后一个。老实说,不知道,docs 也没有。它甚至支持吗?根据我的示例,我知道这是用于“浅”填充:
User.populate('cars')
.populate('houses')
深的呢?
【问题讨论】:
当然是Users.populate( path: 'users', populate: path: 'cars houses' )
。将'cars houses'
作为当前级别中以空格分隔的路径列表。至少对于单个级别来说是这样,所以对于其他任何事情来说肯定应该是一样的。
谢谢,它有帮助。我是否忽略了文档中的解释?
在文档开头的某处提到了空格分隔列表。它取代了你提到的.populate().populate()
。
好的,谢谢。考虑发布您的有用评论作为答案,它可能对其他人有所帮助。
【参考方案1】:
1) 传递具有要填充属性的对象数组:
Manager.find()
.populate(
path : 'users',
populate: [
path: 'cars' ,
path: 'houses'
]
);
此解决方案可以充分利用深度填充。考虑:
Manager.find()
.populate(
path : 'users',
populate: [
path: 'cars' ,
path : 'houses',
populate:
path : 'rooms',
populate: 'windows'
]
);
2) 传递要填充的以空格分隔的集合字符串:
Manager.find()
.populate(
path : 'users',
populate: 'cars houses'
);
【讨论】:
【参考方案2】:这是做嵌套人口的方式。在这种情况下,首先它将填充用户,然后填充用户的爱好,然后从用户的爱好填充足球,然后它将从用户 -> 爱好 -> 足球 -> favouritePlayers 填充最喜欢的球员姓名。
Model.find()
.populate(
path : 'users',
populate: [
path: 'Hobbies' ,
path : 'Football',
populate:
path : 'favouritePlayers',
populate: 'playerNames'
]
);
【讨论】:
虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。以上是关于猫鼬多个深层种群的主要内容,如果未能解决你的问题,请参考以下文章