javascript - 如何在 MongoDB 中将嵌套对象显示为超级对象?
问题描述
正如这里所说,我必须将引用对象保存在名为“item”的嵌套键中;
var userSchema = new Schema({
name: String,
connections: [{
kind: String,
item: { type: ObjectId, refPath: 'connections.kind' }
}]
});
var organizationSchema = new Schema({ name: String, kind: String });
var User = mongoose.model('User', userSchema);
var Organization = mongoose.model('Organization', organizationSchema);
在我的数据库中,它更像是这样的:
var childSchema = new Schema({
kind: String,
item: {
type: Schema.Types.ObjectId,
refPath: 'children.kind'
}
},{ _id : false, strict:false });
var schema = new Schema({
name: String,
kind: String,
children: [childSchema]
},{
strict: false
});
现在,它是一个基于树的文件夹结构模型,它可以有一个文件夹或一个叶子作为子对象。
我需要一个递归填充,所以我在 SO 上找到了答案,它变成了这样;
var autoPopulateChildren = function(next) {
this.populate({path:'children.item', select:'name id children'});
next();
};
schema.pre('findOne', autoPopulateChildren)
.pre('find', autoPopulateChildren)
现在,当我进行find
查询时,我得到了类似的示例;
{
"name": "Some Folder",
"children": [
{
"kind": "Leaf",
"item": {
"name": "First Level Leaf",
"id": "5b61c85f25375fddf6048d3c"
}
},
{
"kind": "Folder",
"item": {
"name": "First Level Folder",
"id": "5b61d844d77fb30b9537e5d1"
"children": [
{
"kind": "Leaf",
"item": {
"name": "Second Level Leaf",
"id": "5b61c85f25375fddf6048d3c"
}
}
]
}
}
],
"id": "5b61c85f25375fddf6048d3d"
}
但是现在,我需要摆脱“善良”(不显示),并且我需要在小时候显示“项目”对象(它应该name
代替item:{name:'a'}
:
{
"name": "Some Folder",
"children": [
{
"name": "First Level Leaf",
"id": "5b61c85f25375fddf6048d3c"
},
{
"name": "First Level Folder",
"id": "5b61d844d77fb30b9537e5d1"
"children": [
{
"name": "Second Level Leaf",
"id": "5b61c85f25375fddf6048d3c"
}
]
}
],
"id": "5b61c85f25375fddf6048d3d"
}
我怎样才能在autoPopulateChildren
功能上做到这一点?
解决方案
推荐阅读
- clojure - 在core.logic中合成满足特征约束的最小地图?
- azure - Azure PowerShell - 从 SSL 证书中提取 PEM
- asp.net-mvc - 使用 knockout.js 临时将文本框数据添加到网格
- jquery - 如何在表中显示json数组jquery
- swift - 突然找不到标头中的标头
:1:9: 注意:在包含的文件中 :1: Xcode - windows - 在 Windows 用户锁定系统时使用任务计划程序创建文件
- c# - 在 ASP.NET Core 上配置 DefaultScheme 和 DefaultChallengeScheme 有什么意义?
- arrays - 子数组的总和乘以子数组的最后一个元素
- android - 将动态子视图垂直添加到 ConstraintLayout
- android - 在键盘显示状态屏幕不可滚动