在我的当前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"]}
would return:
[{"partcode": "Child1","label": ["label1"]},
{"partcode": "Child2","label": ["label1"]},
{"partcode": "Child3","label": ["label1"]}]
我将在父文档的children字段中指定一个标签,以特殊字符开头(目前我正在使用'*',但如有需要,我可以更改为其他字符)。
伪代码:
1.查找Parent 2.获取children数组 3.在数组中,如果child以字符开头:
- 获取与匹配的所有零件的partcodes数组 - 在children数组中用partcodes替换 4.返回children数组
不以标签字符开头的子元素也应被返回。
find({label: {$in: [/label1/]}}, callback)
。确保为“label”字段添加索引。 - Andreas