Return 文档匹配字段数组

Return documents matching field array

将 Mongoose 与 MongoDB 结合使用,我需要 return 基于初始查找字段的一系列查找。我的架构如下:

var PartSchema = new Schema({
    partcode: String,
    children: [String]
});

数据如下所示:

[{"partcode":"A1","children":["B1","B2","B3","B4"]},
 {"partcode":"B1","children":["C11","C21","C31","C41"]},
 {"partcode":"B2","children":["C12","C22","C32","C42"]},
 {"partcode":"B3","children":["C13","C23","C33","C43"]},
 {"partcode":"B4","children":["C14","C24","C34","C44"]}]

我可以使用以下静态调用查询 A1 的子字段:

var childrenOnly =
  {children: 1, _id: 0};
PartSchema.static('getChildren', function (partcode, callback) {
  return this.find({ partcode: partcode }, childrenOnly, callback);
});

这 return 秒(通过快递)

[{"children":["B1","B2","B3","B4"]}]

我需要return的是

[{"partcode":"B1","children":["C11","C21","C31","C41"]},
 {"partcode":"B2","children":["C12","C22","C32","C42"]},
 {"partcode":"B3","children":["C13","C23","C33","C43"]},
 {"partcode":"B4","children":["C14","C24","C34","C44"]}]

我猜第一个查询需要迭代调用 returning children 数组,然后迭代 children 数组以获取每个子记录。

一般的想法是首先尝试使用 findOne() 方法获取包含子代码的数组,然后使用该数组作为 [=15 的查询=] 运算符在 find() 方法中 return 完整结果。

var childrenOnly = {children: 1, _id: 0};
PartSchema.static('getChildren', function (partcode, callback) {
    var self = this;
    this.findOne({ partcode: partcode }, childrenOnly)
        .exec(function (err, doc) {
             console.log(doc.children); // {"children":["B1","B2","B3","B4"]}
             return self.find({"partcode": {"$in": doc.children} }, callback);
        });
});

-- 编辑 --

考虑使用 promises。我还没有对此进行测试,但我相信它也应该可以解决问题:

var childrenOnly = {children: 1, _id: 0};
PartSchema.static('getChildren', function (partcode, callback) {
    var self = this,
        promise = this.findOne({ partcode: partcode }, childrenOnly).exec();
    promise.then(function (doc) {
        return self.find({"partcode": {"$in": doc.children} }, callback);            
    });               
});