我的Node js / express应用程序中有以下架构,其中每个仓库可以选择拥有一个父仓库。我编写了保存仓库的代码,但无法弄清楚如何检索任何仓库(有父仓)并获取其父仓库名称......所以想知道我是否可以在一次调用中做到这一点?感谢
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var warehouseSchema = new Schema({
name: { type: String, required: true },
parentID: { type: String, ref: 'Warehouse' }
});
module.exports = mongoose.model('Warehouse', warehouseSchema);
答案 0 :(得分:2)
只是as Philipp
said,你不能用一个MongoDB auery来做。
但您可以使用单个Mongoose命令,使用其Query Population feature:
Warehouse.findById(warehouse_id).populate('parentID').exec(function(err, doc) {
if (err) {
// something get wrong
} else {
// doc.parentID is a parrent Warehouse here
}
})
在内部,Mongoose会向MongoDB发出两个单独的查询(一个用于子文档,另一个用于其父文件),对你而言,它看起来像一个命令。
答案 1 :(得分:1)
MongoDB无法对数据库执行JOIN。只要父项是仓库对象中的引用,就无法使用一个查询检索它们。首先必须查询仓库,然后使用第二个查询解析引用。
要避免第二个查询,您可能需要考虑在子文档中嵌入有关父文档的必需信息。 MongoDB中的重复信息不像关系数据库中那样异常。