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);
});
});
将 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);
});
});