【发布时间】:2016-08-11 17:35:39
【问题描述】:
在我当前的 Mongo DB 中,我有一个简单的 Parts 集合,具有父子关系,如下所示:
{"partcode": "Parent1","children": ["Child1","Child2","Child3"]}
{"partcode": "Child1","label": ["label1"]}
{"partcode": "Child2","label": ["label1"]}
{"partcode": "Child3","label": ["label1"]}
为了返回一个partcode的孩子,我使用了下面的Mongoose函数:
PartSchema.static('getChildren', function(query, callback) {
var self = this,
self.findOne(query, {children: 1, _id: 0})
.exec(function(err, doc) {
return (self.find({
"partcode": {
"$in": doc.children
}
}, {_id: 0}, callback));
});
});
这将返回以下数组:
[{"partcode": "Child1","label": ["label1"]},
{"partcode": "Child2","label": ["label1"]},
{"partcode": "Child3","label": ["label1"]}]
我想实现一个标签系统,借此我可以将标签指定为元子项,并让代码返回与该标签匹配的所有子项。
{"partcode": "Parent1","children": ["*label1"]}
会返回:
[{"partcode": "Child1","label": ["label1"]},
{"partcode": "Child2","label": ["label1"]},
{"partcode": "Child3","label": ["label1"]}]
我将在父文档的子字段中指定一个以特殊字符开头的标签(目前,我使用的是“*”,但如果需要,我很乐意将其更改为其他内容)。
伪代码:
- 找到父母
- 获取Parent的children数组
- 在数组中,如果 child 以 label 字符开头
- 获取与 label 和 匹配的所有部件代码的数组
- 用部分代码替换 children 数组中的标签
- 返回儿童数组
还应返回未以标签字符开头的子代。
【问题讨论】:
-
您可以在 $in 语句中使用正则表达式。类似于
find({label: {$in: [/label1/]}}, callback)的内容确保为label字段添加索引 -
谢谢。我对发现的细节没意见。我创建了一个标签函数,它返回具有特定标签的所有对象。我不确定如何最好地构建它;也就是大招。我倾向于使用聚合管道。