根据对象_id检索名称

时间:2014-11-27 16:05:27

标签: node.js mongodb express mongoose

我的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);

2 个答案:

答案 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中的重复信息不像关系数据库中那样异常。